Начну с краткого изложения работы.
- Функция
setValue()
является частью consoleIP.dll
. - Функция
setValue()
также экспортируется. - Функция Add () является частью calcFun.dll.
- Функция Add () также экспортируется.
- Функция Add () используется Функция
setValue()
через LoadLibary()
и GetProcAddress()
,GetProcAddress
использовать дескриптор calcFun.dll
. - Теперь
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?
В соответствии с вариантом использования мне нужно иметь сценарии для моего проекта.
Любая помощь будет отличной.