当前位置: 技术问答>linux和unix
C程序移植到Linux下遇到的一个问题
来源: 互联网 发布时间:2016-09-23
本文导语: BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: { int m_OpenStatus = 0; m_OpenStatus = Si_OpenDevice(15); if(m_OpenStatus != S...
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
int m_OpenStatus = 0;
m_OpenStatus = Si_OpenDevice(15);
if(m_OpenStatus != SR_SUCCESSFULLY){
MessageBox(NULL,"请检查加密卡或驱动程序是否安装好?","警告",MB_OK+MB_ICONWARNING);
//return FALSE;
}
}
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
Si_CloseDevice();
break;
}
return TRUE;
}编译时此处产生错误 expected '='',''asm' or '_attribute_' before APIENTRY
小弟 把BOOL改成int 前面定义了#define WINAPI __stdcall
#define APIENTRY WINAPI
#define FAR far
typedef const void far *LPCVOID
出现错误expected '='',''asm' or '_attribute_' before token
expected '='',''asm' or '_attribute_' before DllMain
查资料得知Linux下没有与DllMain完全对应的函数,迷茫中望高手指点一下
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
int m_OpenStatus = 0;
m_OpenStatus = Si_OpenDevice(15);
if(m_OpenStatus != SR_SUCCESSFULLY){
MessageBox(NULL,"请检查加密卡或驱动程序是否安装好?","警告",MB_OK+MB_ICONWARNING);
//return FALSE;
}
}
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
Si_CloseDevice();
break;
}
return TRUE;
}编译时此处产生错误 expected '='',''asm' or '_attribute_' before APIENTRY
小弟 把BOOL改成int 前面定义了#define WINAPI __stdcall
#define APIENTRY WINAPI
#define FAR far
typedef const void far *LPCVOID
出现错误expected '='',''asm' or '_attribute_' before token
expected '='',''asm' or '_attribute_' before DllMain
查资料得知Linux下没有与DllMain完全对应的函数,迷茫中望高手指点一下
|
楼主,linux下的动态库根本就不需要这个函数的。
windows下的dll等于linux下的so。
linux下的so库是不需要这个鬼dllmain函数的。
windows下的dll等于linux下的so。
linux下的so库是不需要这个鬼dllmain函数的。
|
移植,我觉得用#if 0 & #endif来慢慢调,首先把程序内的所有代码都屏蔽,一个空函数,编译通过了,再慢慢往下移,直到全部代码编译通过,这样没出现一个问题的时候,定位非常方便。我觉得还是挺高效的,你的程序估计也是一些变量的定义问题,Linux不识别的类型,一个个解决吧。