[英]Access violation reading location when accessing a dll method
我使用以下代码访问dll文件中的方法,并从dll方法调用方法时获取Access violation reading location 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();
}
}
}
有什么建议原因可能是什么? dll文件中是否有错误? 有什么办法可以读取dll文件的参数吗? 请它检查我是否正确获取参数类型? 依赖检查器显示该方法存在,但我不能确定参数类型?
更新:
我仍然得到错误
test.exe中0x0040356c处的第一次机会异常:0xC0000005:访问冲突写入位置0x42080000。 Cexperiment.exe中0x0040356c处的未处理异常:0xC0000005:访问冲突写入位置0x42080000。
我也相信这个问题可能与调用约定无关。我相信的原因是因为我没有收到来自VS2010的错误消息,说明调用约定可能是一个原因。当我尝试使用其他一些时,我收到了该消息DLL。 因此,如果调用约定或参数不是问题(如果参数不同,则会获得相同的调用约定消息),那么它可能是其他内容。 关于我可以尝试的任何建议?
您需要检查dll函数的调用约定并相应地声明LPMyfunct
类型。 调用约定的可能值为: stdcall
, cdecl
, pascal
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.