我使用下面的代码来访问dll文件中的方法,从dll方法调用方法时我得到一个Access violation reading location 0x41100000
。访问dll方法时访问冲突读取位置
,我试图访问该方法的原型如下
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文件的参数?它检查我是否正在获取参数类型?从属性检查器显示该方法存在,但我无法确定参数类型?
更新:
我仍然得到错误
第一次机会异常在0x0040356c中的test.exe:0000005: 访问冲突写入位置0x42080000。 0x0040356c在Cexperiment.exe中未处理的异常:0xC0000005:写入 位置0x42080000的访问冲突。
我也相信,这个问题可能不会涉及到调用约定。其原因我认为是因为我没有得到从VS2010指出调用约定可能是cause.I得到了消息的错误消息当我尝试使用其他的DLL。因此,如果调用约定或参数不是问题(您获得相同的调用约定消息,则在参数不同的情况下),那么它可能是别的。有什么我可以尝试的建议吗?
在你的另一个问题中,你说它需要9个花车。这里你传递了9个非浮点数。 – huskerchad 2013-05-10 01:49:12
是的。我认为这个涵盖是隐含的。我已经尝试过传递花车,并得到相同的答案 – MistyD 2013-05-10 01:51:33
不要担心,代替花车的整数很好。 – chris 2013-05-10 01:52:06