2009-11-17 23 views
37

Win32 uygulamasının HINSTANCE'ı WinMain'e aktarıldı, ancak geçerli HINSTANCE'ı belirlemenin başka bir yolu var mı (eğer bunu söyleyemediyseniz, win32 programlamada çok yeniyim!)? Bir kütüphanenin içinde bir pencere oluşturmam gerekiyor ve (kütüphane çapraz platform olduğundan), kimliği geçmek zorunda kalmamayı tercih ediyor.Geçerli HINSTANCE'ı belirle?

cevap

61

bellek, GetModuleHandle(NULL); örnek tanıtıcı döndürür hizmet.

+4

Tamamen doğru değil: Exe'nin HINSTANCE'sini tekrarlar. Kod bir DLL içinde yürütürse, bu yanlış davranışlara yol açabilir –

+1

@Serge: ne söyleyeceğinden, yürütülebilir dosyasının HINSTANCE istediği tam olarak. –

+4

+1: Bir modül adından geçerek, bu işlev de 'HINSTANCE' DLL'lerini almak için kullanılabilir. “HINSTANCE” ve “HMODULE” un Windows'un modern sürümlerinde esas olarak eşdeğer olduğunu unutmayın. –

8

MFC kullanıyorsanız, AfxGetInstanceHandle'ı kullanabilirsiniz. MFC kullanmıyorsanız

kullanabilirsiniz: GetWindowLong (hWnd, GWL_HINSTANCE)

+0

Bu yöntem yalnızca MFC mi? – dicroce

+0

Ya da MFC olmayan bir yolla da güncelledim. –

+1

Zaten bir pencerem var (ve böylece, ve hwnd) varsayalım ... Ben pencere oluşturma işini kitaplığımın içine itmeye çalışıyorum ... – dicroce

13

__ImageBase özellikle kütüphaneler söz konusu olduğunda arkadaşınız. (R. Chen tarafından, olmasa Brian Bondy ile bağlantılı aynı post) bağlantılı blog yazısı okunmaya değer olduğunu

Not (yorumlar dahil!)

+0

GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS ile hantal [GetModuleHandleEx] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms683200.aspx) yoksayılıyor, bu gerçekten bulmak için sadece ** güvenilir ** yoldur modül kolu ve kabul edilen cevap olmalıdır. – IInspectable

0

fonksiyon AfxGetStaticModuleState() hile yok . Bir dll içinde çağırırsanız, işlevler, bir exe içindeki çağrı, yürütülebilir dosyaya tanıtıcı döndürdüğünde, tanıtıcıyı dll'ye döndürür.

DWORD size; 
TCHAR fileName [MAX_PATH]; 
HMODULE hModule = AfxGetStaticModuleState()->m_hCurrentInstanceHandle; 
::GetModuleFileName (hModule, fileName, size); 
+1

Soru * winapi * ile etiketlenmiştir. Windows API'sında 'AfxGetStaticModuleState' yoktur. – IInspectable

İlgili konular