我正在为第三方应用程序编写模块;应用程序uses __cdecl
调用约定。
同时,我有一个uses __stdcall
调用约定的遗留 DLL。
我可以创建一个在一端exports __cdecl
起作用,而在另一端起imports __stdcall
作用的包装器吗?我还有哪些其他选择?
谢谢,
编辑:
这里有一些额外的信息可以帮助我澄清我的情况。
有一个third_party.exe
需要访问skeleton.dll
. 源代码skeleton.dll包含下面的头文件,使用__cdecl编译。
#ifdef _EXPORTING
#define DECLSPEC __declspec(dllexport)
#else
#define DECLSPEC __declspec(dllimport)
#endif
#ifdef __cplusplus
extern "C" {
#endif
DECLSPEC int ICD_Create(char* id);
...
...
...
理想情况下,我会使用框架源代码来开发我的 DLL;不幸的是,将我当前的 VB6 遗留代码移植到 C++ 中太耗时了。鉴于此,我不得不按照本指南破解我的 VB6 代码(这是一种变通方法,但它允许我使用 ActiveX DLL 作为标准 C DLL)。
我对修改后的 VB6 调用约定以及如何修改它不是 100% 有信心。练习使用 __stdcall,并且似乎可以在我开发的测试应用程序中正常工作。但是,当我使用第三方应用程序对其进行测试时,它会正确调用某些函数,但在其他函数中它会崩溃。
架构看起来像:
Application: ThirdParty.exe (out of your control: Uses __cdecl)
|
|
Plugin module: Skeleton.dll (your code)
|
|
Legacy DLL: ModifiedVB6.dll (out of your control: Seem to work with __stdcall)
legacy DLL 生成 dll、lib 和 def 文件;没有头文件。