Ошибка доступа Access при использовании функциональности вложенных DLL - PullRequest
0 голосов
/ 21 января 2019

Начну с краткого изложения работы.

  1. Функция setValue() является частью consoleIP.dll.
  2. Функция setValue() также экспортируется.
  3. Функция Add () является частью calcFun.dll.
  4. Функция Add () также экспортируется.
  5. Функция Add () используется Функция setValue() через LoadLibary() и GetProcAddress(),GetProcAddress использовать дескриптор calcFun.dll.
  6. Теперь test.exe загружает и использует функции calcFun.dll с использованием LoadLibary() и GetProcAddress().GetProcAddress() использовать дескриптор consoleIP.dll

Все dlls и exe - это разные проекты.

// код consoleIP.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);
}

// calcFun.dll code

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 code

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;
}

Можно ли напрямую вызвать setValue из test.exe?

В соответствии с вариантом использования мне нужно иметь сценарии для моего проекта.

Любая помощь будет отличной.

...