当调用从dll加载的类方法时,当我调用该函数时,“ this”指针在我的应用程序中会更改。在我的示例中,错误发生在“ if(Func2)return(* Func2)(s);”行中在调试器中,程序在DLL中找到Func2,我可以逐步完成Func2,但没有看到我期望的类实例。 我想尽可能避免使用__declspec(dllimport / export),并使用模型定义文件,即使这是为了了解其工作原理。 这听起来像是对DEF文件的简单更改,对函数或其声明的调用都可以解决问题,但是我尝试了几次代码置换,但均未成功。有人可以告诉我正确的方法是什么吗?
感谢您的帮助!
#include <Windows.h>
#include <string.h>
namespace Mine
{
class B
{
public:
int Func1 ( wchar_t * );
int Func2 ( wchar_t * );
int Counter = 0;
};
int B::Func1 ( wchar_t *s )
{
HINSTANCE hdll = 0;
typedef int ( __cdecl *TthisFunc2 )(wchar_t *);
if ( hdll = LoadLibrary ( L"MyDll.dll" ) )
{
TthisFunc2 Func2 = ( TthisFunc2 ) GetProcAddress ( hdll, "Func2" );
if ( Func2 ) return (*Func2) ( s );
}
return 0;
};
extern "C" int main ( )
{
B b;
int l = b.Func1 ( L"First call" );
l += b.Func1 (L"Last call" );
return l;
}
}
///////////// In MyDll.dll
namespace Mine
{
int B::Func2 ( wchar_t *s )
{
return Counter += (s ? wcslen(s) : 0);
}
}
//In MyDLL module definition file
//EXPORTS Func2