Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.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++ 访问dll方法时访问冲突读取位置_C++_Dll_Getprocaddress - Fatal编程技术网

C++ 访问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

我正在使用以下代码访问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 = 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
。是的,我正在阅读详细信息