msdn里 说 dllexport函数可以在dll里,也可以在exe文件里
但是我为什么不用调用 exe文件里dllexport函数?//in project1.exe
extern "C" __declspec(dllexport)
void _stdcall fun()
{
MessageBox(NULL,"Hello","ddHello",0);
}//另一个调用project1.exe的dllexport程序
void _stdcall (*dll_fun)();
HINSTANCE h=LoadLibrary("Project1.exe");
if(h)
{
(FARPROC)dll_fun=GetProcAddress(h,"fun");
if(dll_fun)
dll_fun() ; //非法错误。
}
但是我为什么不用调用 exe文件里dllexport函数?//in project1.exe
extern "C" __declspec(dllexport)
void _stdcall fun()
{
MessageBox(NULL,"Hello","ddHello",0);
}//另一个调用project1.exe的dllexport程序
void _stdcall (*dll_fun)();
HINSTANCE h=LoadLibrary("Project1.exe");
if(h)
{
(FARPROC)dll_fun=GetProcAddress(h,"fun");
if(dll_fun)
dll_fun() ; //非法错误。
}
改一下://另一个调用project1.exe的dllexport程序
typedef void _stdcall (*dll_fun)();
dll_fun pfun;
HINSTANCE h = LoadLibrary("Project1.exe");
if(h)
{
pfun = (dll_fun)GetProcAddress(h,"fun");
if(pfun)
(*pfun)() ;
}
就可以调用了(静态连接)
HINSTANCE hInst=LoadLibrary("win32.exe");
DLL_FUNC f=(DLL_FUNC)GetProcAddress(hInst,"_fun@0");
f() ;
我project1.exe是用bcb做的。
测试程序用bcb,vc ,lcc都没有成功。
不知道为什么
这个是因为loadlibrary在load exe时并不会初始化其imports tables,所以调用外部api就会非法操作。你把exe地输出函数改为一个简单地计算或者只是返回某个值就可以了.
记住不要调用其他dll里面地函数,如果要用crt lib地话,静态连接进去
bo2k源码里面有那个函数可以用,需要改一些的