我将从工作简介开始。
setValue()
是consoleIP.dll
的一部分。setValue()
也被导出。setValue()
和LoadLibary()
使用了函数GetProcAddress()
。 GetProcAddress
使用calcFun.dll
的句柄。test.exe
使用calcFun.dll
和LoadLibary()
加载和使用GetProcAddress()
的功能。 GetProcAddress()
的{{1}}使用句柄所有consoleIP.dll
和dlls
都是不同的项目。
// 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;
}
?
根据用例,我需要有项目的方案。
任何帮助都会很棒。