所以我有一个Visual C ++应用程序,在我的代码中我使用CoCreateInstance函数,该函数用于创建COM对象并从对象获取接口:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms686615(v=vs.85).aspx
此功能:
hr = CoCreateInstance(CLSID_CppCmnBL, NULL, CLSCTX_INPROC_SERVER,
IID_ICppCmnBL, reinterpret_cast<void**>(&m_pBL));
在32位版本的Windows上运行良好,但在64位版本的Windows上运行失败。
我看了很多,似乎在64位系统上注册32位对象时存在问题。
相关问题:
http://forums.codeguru.com/showthread.php?400956-32-bit-app-CoCreateInstance-fails-on-64-bit
我得到的异常是:System.AccessViolationException
答案 0 :(得分:0)
请这样做:
我假设您有一个.exe(一个调用CoCreateInstance())和一个.dll(您尝试实例化的Com / ActiveX对象)。这是对的吗?
dumpbin /all
并发布结果。 请在所有相关二进制文件上运行dumpbin; 特别是 COM / ActiveX类。
Win32 .dll应该喜欢这样的东西:
FILE HEADER VALUES
14C machine (x86)
3 number of sections
5355B2AD time date stamp Mon Apr 21 17:07:09 2014
0 file pointer to symbol table
0 number of symbols
E0 size of optional header
2102 characteristics
Executable
32 bit word machine
DLL
OPTIONAL HEADER VALUES
10B magic # (PE32)
MSVS 6不能与.Net合作; MSVS 6不会构建C ++ 11代码......但是如果您尝试做的只是让遗留应用程序正常工作,那应该没问题。再说一遍,我假设只有一个.exe和一个.dll在混合中。
我假设.exe可以编译为32位Win32 .exe(不 .Net .exe),而.dll是Win32,COM / ActiveX类。两者都应该有#34; PE32&#34; dumpbin中的标头。如果不是,请告知。
我假设您可以控制,并且可以重建和调试此应用的相关源代码的所有。如果不是,请告知。
如果你不能,那可能表明某些事情是错的&#34;,我会把你的故障排除工作集中在那里。
我希望有所帮助!