Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
动态加载客户端C++;使用ACE\U dll的dll将错误作为未处理的异常 我想动态加载我的C++ Windows应用程序中的客户端DLL。所以我使用的是ACE_DLL。我想在应用程序的客户端dll中创建类的对象。 因此,我编写了一个包装器类。它的一个成员函数创建ACE_DLL的对象。 然后使用该对象加载客户端dll。接下来,我将通过ACE_DLL对象调用symbol函数,并在客户端DLL中传递类的构造函数的损坏名称。接下来,我调用包含构造函数地址的函数指针(_entry),但这次我得到的错误是“未处理的异常(访问冲突)”_C++_Dll_Ace - Fatal编程技术网

动态加载客户端C++;使用ACE\U dll的dll将错误作为未处理的异常 我想动态加载我的C++ Windows应用程序中的客户端DLL。所以我使用的是ACE_DLL。我想在应用程序的客户端dll中创建类的对象。 因此,我编写了一个包装器类。它的一个成员函数创建ACE_DLL的对象。 然后使用该对象加载客户端dll。接下来,我将通过ACE_DLL对象调用symbol函数,并在客户端DLL中传递类的构造函数的损坏名称。接下来,我调用包含构造函数地址的函数指针(_entry),但这次我得到的错误是“未处理的异常(访问冲突)”

动态加载客户端C++;使用ACE\U dll的dll将错误作为未处理的异常 我想动态加载我的C++ Windows应用程序中的客户端DLL。所以我使用的是ACE_DLL。我想在应用程序的客户端dll中创建类的对象。 因此,我编写了一个包装器类。它的一个成员函数创建ACE_DLL的对象。 然后使用该对象加载客户端dll。接下来,我将通过ACE_DLL对象调用symbol函数,并在客户端DLL中传递类的构造函数的损坏名称。接下来,我调用包含构造函数地址的函数指针(_entry),但这次我得到的错误是“未处理的异常(访问冲突)”,c++,dll,ace,C++,Dll,Ace,请让我知道我的方法是否正确。下面是我的应用程序中的调用顺序 ACE\u DLL*\u pDll typedef测试*(*TestFP)() TestFP\u条目 \u pDll=new ACE\u DLL() \u pDll->open(“dllname\u to\u be\u opend”) std::string sSymbol=“Test”//客户端dll中测试类构造函数的名称已损坏 \u entry=(TestFP)\u pDll->symbol(sSymbol.c_str()) T

请让我知道我的方法是否正确。下面是我的应用程序中的调用顺序


ACE\u DLL*\u pDll
typedef测试*(*TestFP)()
TestFP\u条目


\u pDll=new ACE\u DLL()

\u pDll->open(“dllname\u to\u be\u opend”)

std::string sSymbol=“Test”//客户端dll中测试类构造函数的名称已损坏

\u entry=(TestFP)\u pDll->symbol(sSymbol.c_str())

Test*obj=_entry()//Testdll.exe中0x00362b2f处未处理的异常:0xC0000005:访问冲突写入位置0x00362b0c


谢谢,,
普拉萨德看起来不错。你能运行ACE_wrappers/tests/DLL_Test.exe吗?如果有效,则将测试代码与您的代码进行更仔细的比较。

您所展示的代码,即

_pDll = new ACE_DLL();
_pDll->open("dllname_to_be_opend");
std::string sSymbol = "Test"; 
_entry =  (TestFP) _pDll->symbol(sSymbol.c_str());

不验证
ACE\u DLL::open
调用的返回值是否为零(成功时为0,失败时为1),或者
ACE\u DLL::symbol
调用的返回值是否为零(失败时返回0)。

否。我的测试应用程序未运行。将错误指定为未处理的异常。如果我可以使用symbol()方法在客户端dll中获取测试类构造函数的地址,然后调用此函数指针来创建测试类的对象,我会感到困惑。如果测试程序也没有运行,则很可能是生成问题。我建议将您的构建设置与构建记分板()上最接近您的环境的构建设置进行比较,看看有什么不同。一旦你可以让DLL_测试工作,返回并重新尝试你的程序。