使用嵌套DLL的功能时出现访问冲突错误

时间:2019-01-21 06:43:25

标签: c visual-studio-2010 dll

我将从工作简介开始。

  1. 函数setValue()consoleIP.dll的一部分。
  2. 函数setValue()也被导出。
  3. Add()函数是calcFun.dll的一部分。
  4. 功能Add()也被导出。
  5. Function Add()通过setValue()LoadLibary()使用了函数GetProcAddress()GetProcAddress使用calcFun.dll的句柄。
  6. 现在test.exe使用calcFun.dllLoadLibary()加载和使用GetProcAddress()的功能。 GetProcAddress()的{​​{1}}使用句柄

所有consoleIP.dlldlls都是不同的项目。

// consoleIP.dll代码

exe

// calcFun.dll代码

extern "C" __declspec(dllexport) void setValue(float * a, float * b);
void setValue(float * a, float * b){
    printf("Enter value of a and b");
    scanf("%f %f", a,b);
}

// test.exe代码

typedef void (__cdecl * setValDll)(float *,float *);
extern "C" __declspec(dllexport) float Add(void);
float firstIp;
float secondIp;

float Add(void){
    HMODULE  hmodule;
    setValDll setValDllFunc;
    hmodule = LoadLibrary("consoleIP.dll" );
    if(hmodule == NULL){
        printf("DLL load Failed\n");
        return 101;
    }

    setValDllFunc = (setValDll)GetProcAddress(hmodule, "setValue");
    setValDllFunc(&firstIp, &secondIp);

}

有什么方法可以直接从test.exe调用HMODULE dllModule; typedef float (__cdecl * addVal)(void); typedef void (__cdecl * setValDll)(float *,float *); main(){ addVal addFuncAddr; setValDll setValFromDll; float test1; float test2; dllModule = LoadLibrary(calcFunc.dll"); addFuncAddr = (addVal)GetProcAddress(dllModule, "Add"); returnVal = addFuncAddr(); // Works fine setValFromDll = (setValDll)GetProcAddress(dllModule,"setValue"); setValFromDll(&test1, &test2); // Access Violation exception return 0; }

根据用例,我需要有项目的方案。

任何帮助都会很棒。

0 个答案:

没有答案