C++ 访问dll方法时访问冲突读取位置
我正在使用以下代码访问dll文件中的一个方法,当从dll方法调用该方法时,我得到一个C++ 访问dll方法时访问冲突读取位置,c++,dll,getprocaddress,C++,Dll,Getprocaddress,我正在使用以下代码访问dll文件中的一个方法,当从dll方法调用该方法时,我得到一个访问冲突读取位置0x41100000 我尝试访问的方法是以下原型 int dstoch(float,float,float,float,float,float,float,float,float); 这是我的密码 typedef int (*LPMyfunct)(float,float,float,float,float,float,float,float,float); HINSTANCE hDLL = N
访问冲突读取位置0x41100000
我尝试访问的方法是以下原型
int dstoch(float,float,float,float,float,float,float,float,float);
这是我的密码
typedef int (*LPMyfunct)(float,float,float,float,float,float,float,float,float);
HINSTANCE hDLL = NULL;
LPMyfunct lpdstoch = NULL;
hDLL = LoadLibrary("c:\\myfile.dll");
if(hDLL!=NULL)
{
std::cout << "Library loaded \n";
lpdstoch = (LPMyfunct)GetProcAddress((HMODULE)hDLL, "dstoch");
int res = 0;
if(lpdstoch != NULL)
{
try
{
res = lpdstoch(1.1,2.2,3.3,4.4,5.4,6.4,7.4,8.8,9.9); //Gives the error
}
catch (std::exception &e)
{
std::cout << e.what();
}
}
}
typedef int(*LPMyfunct)(float,float,float,float,float,float,float);
HINSTANCE hDLL=NULL;
LPMyfunct lpdstoch=NULL;
hDLL=LoadLibrary(“c:\\myfile.dll”);
如果(hDLL!=NULL)
{
std::cout您需要检查dll函数的调用约定,并相应地声明LPMyfunct
类型。调用约定的可能值有:stdcall
,cdecl
,pascal
在您的另一个问题中,您说它需要9个浮点。这里您要传递9个非浮点。是的。我认为转换是正确的将是隐式的。我尝试过传递浮点,得到了相同的答案。别担心,用整数代替浮点是可以的。如果签名正确,转换将是隐式的。您不会显示这里有什么LPMyfunct
,也不会显示dstoch的实际原型。调用约定双重检查也是相关的。抱歉,刚刚更新了post@igor您是否建议typedefint(*LPMyfunct)(float,float,float,float,float,float,float);
可能是typedefint(_stdcall*LPMyfunct)(float,float,float,float,float,float,float,float,float)
或您提到的类型?@MistyD,是的,这取决于它在DLL中的内容。我目前正在尝试每种类型。顺便问一下,\u stdcall
或\u stdcall
之间是否有区别?我不知道“单下划线”stdcall。除非它在某个地方被定义为\uu stdcall
。是的,我正在阅读详细信息