在C ++项目中导出DLL

时间:2010-04-28 17:06:15

标签: c++

我在项目的__declspec(dllexport)中遇到了一个奇怪的行为。 我有一个C ++项目,它使用类,名称空间,try-catches和更多cpp元素。 在此DLL中导出任何虚拟函数时,没有其他C项目能够使用LoadLibrary加载它(获取错误'模块未找到')。

是否可以通过C项目动态加载C ++ dll? 这些项目是Windows Mobile项目,但它们的行为应与常规PC win32相同。

我坚持下去,任何帮助都会受到赞赏。

谢谢你, 埃米尔。

2 个答案:

答案 0 :(得分:3)

LoadLibrary完全忘记了用于编译模块的语言。如果LoadLibrary表示找不到该模块,则很可能它真的找不到它。确保您已指定正确的文件名。如果您已包含驱动器和路径,请确保它们也是正确的。如果您尚未包含驱动器或路径,请确保该文件存在于LoadLibrary可以找到的位置。它搜索的地点列在Dynamic-Link Library Search Order中。还要考虑Windows Vista的目录虚拟化功能是否会干扰。

加载DLL后,您可能在使用C代码中的C ++ DLL时遇到任何其他问题。 C ++编译器可能已经破坏了函数名称,因此在调用GetProcAddress时需要提供正确的名称。 C ++代码可能使用与C代码所期望的不同的调用约定,因此您可能需要更改C ++代码,C代码或两者中的声明。如果C ++函数期望接收指向类或其他特定于C ++的类型的指针,则需要更改C ++代码以使其API与C兼容。如果您的DLL分配主机程序应该释放的内存,反之亦然,您需要确保两个模块都可以使用相同的内存管理器。

所有这些都与您报告的问题分开,这只是操作系统无法找到您的文件。首先关注它。

答案 1 :(得分:0)

我发现了问题。这真的是一个依赖dll问题。在加载DLL的目录中找不到它。 谢谢大家。