调用存储在DLL中的C ++类方法

时间:2019-02-17 13:14:52

标签: c++ class methods dll

当调用从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

0 个答案:

没有答案