windows - Hvad afgøres om RegisterTypeLib skriver til win32 eller win64?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg arbejder med to ATL-baserede COM-projekter.


De begge implementerer DllRegisterServer som bare


STDAPI DllRegisterServer(void)
{
  // registers object, typelib and all interfaces in typelib
  return \_Module.RegisterServer(TRUE);
}


som ender med at kalde


::RegisterTypeLib(pTypeLib, bstrPath, szDir);


i atlbase.h: 6516.


Men af ​​en eller anden grund gør dette opkald et af projekterne


HKEY\_CLASSES\_ROOTTypeLib<guid><version>win64


når registreret ved hjælp af regsvr32.exe på Windows 7 32 bit.


Det andet projekt skaber rigtigt


HKEY\_CLASSES\_ROOTTypeLib<guid><version>win32


.


Hvor skal jeg begynde at se for at finde og rette op på denne adfærd?

Bedste reference


Det er meget muligt, at typebiblioteket er målrettet til win64-platformen.
Kontroller typelibarens attributter. Man kan få adgang til dem via ITypeLib :: GetLibAttr: [16]


ITypeLib::GetLibAttr(TLIBATTR **ppTLibAttr)


TLIBATTR-strukturen har et felt af typen SYSKIND. Den indeholder en værdi, der angiver platformen. [17]


typedef enum tagSYSKIND {
  SYS\_WIN16   = 0,
  SYS\_WIN32   = ( SYS\_WIN16 + 1 ),
  SYS\_MAC     = ( SYS\_WIN32 + 1 ),
  SYS\_WIN64   = ( SYS\_MAC + 1 ) 
} SYSKIND;


Jeg håber dette vil hjælpe dig med at løse problemet

Andre referencer 1


Du bygger enten Win32 DLL eller x64 DLL, og typebiblioteket er en vedhæftet ressource. Som du har opdaget ATL projekter bruger RegisterTypeLib API til at få typebiblioteket registreret, og API vil registrere under beskadigelse af bibliotekets ressource (det vil sige, det er normalt det originale målplatform).


Jeg antager, at du har opnået HKEY\_CLASSES\_ROOTTypeLib<guid><version>win64 registrering ved at opbygge/registrere x64 konfiguration.


En anden mulig årsag er, at under Win32 DLL ressource under win64 undernøgle under Projektindstilling i Visual Studio under MIDL, General er Target Environment indstillet forkert. Dette kan ende med at registrere Win32 DLL ressource.