来自外部DLL

问题描述

我有一个外部DLL可以使用。我尝试用LoadLibrary加载DLL并通过调用GetProcAddress获得函数,但是每次调试程序时,我都会得到一个异常,该异常可以被Windows忽略,但最终我的主要方法抛出了异常也永远不会发生异常调用

typedef int(__cdecl* GETRANDOMNUM)(unsigned char*);

int main(int argc,char *argv[])
{
    HMODULE hinstLib = LoadLibrary(TEXT("some.dll"));
    GETRANDOMNUM getrandomnum = (GETRANDOMNUM)GetProcAddress(hinstLib,"getrandomnum");
    
    int state = 0;
    //getrandomnum
    if (ic_getrandomnum != NULL)
    {
        unsigned char password[8] = { 0 };
        state = (getrandomnum)(password);
    }
    
    if(!FreeLibrary(hinstLib))
        return -1;

    return state;
}

"getrandomnum"的定义是:

#ifdef EXPORT
#define IM_OR_EXPORT    extern "C" __declspec(dllexport)
#else
#ifdef USE_IMPORT_LIBRARY
#define IM_OR_EXPORT    extern "C" __declspec(dllimport)
#else
...
#define CALLTYPE  __stdcall
...
IM_OR_EXPORT int CALLTYPE getrandomnum(unsigned char* randomnum);

例外是:

Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call.  This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.

并且:

Ausnahme ausgelöst bei 0x0044C828 in Cpp.exe: 0xC0000005: Zugriffsverletzung beim Ausführen an Position 0x0044C828.

并且:

Ausnahmefehler bei 0x00442F59 in Cpp.exe: Vom Stapelcookie-Instrumentationscode wurde ein stapelbasierter Pufferüberlauf erkannt.

此异常永远重复。

有人可以帮我吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...