能力值:
( LV12,RANK:210 )
2 楼
你用了squid?你的汇编代码明显和你写的代码不一样,建议你重新设置一下vc的环境变量,重新编译,就那么几句话,你能编译出一个1M多的dll,你还能忍受
上传的附件:
能力值:
( LV3,RANK:20 )
3 楼
[QUOTE=我是土匪;1171457]你用了squid?你的汇编代码明显和你写的代码不一样,建议你重新设置一下vc的环境变量,重新编译,就那么几句话,你能编译出一个1M多的dll,你还能忍受
[/QUOTE]
非常感谢您的回复!
你用了squid?
:是用了squid
你的汇编代码明显和你写的代码不一样
:在Win7下printf("gethostbyname success:%s\n", szHostName);这句是可以打印信息的,没看出哪里不一样啊,难道被编译器代码修改过了,求指教!
就那么几句话,你能编译出一个1M多的dll,你还能忍受
:dll中不仅仅有cache这个函数,还有其他很多squid的代码,只是不是导出函数而已,代码是用debug模式编译的,1M多很正常的啊!
能力值:
( LV15,RANK:3306 )
4 楼
__declspec(thread) and DLLs
Thread-local variables work for EXEs and DLLs that are statically linked to the main executable (directly or via another DLL) - i.e. the DLL has to load before the main executable code starts running.
看来不能用LoadLibrary, 得用这种#pragma comment(lib, "xx.lib")
================================================================
难怪..
squid-3.3.4\compat\os\mswin.h
SQUIDCEXTERN THREADLOCAL int ws32_result;
#define THREADLOCAL __declspec(thread)
#define gethostbyname(n) \
(NULL == ((HOSTENT FAR*)(ws32_result = (int)gethostbyname(n))) ? \
(errno = WSAGetLastError()), (HOSTENT FAR*)NULL : (HOSTENT FAR*)ws32_result)
能力值:
( LV3,RANK:20 )
5 楼
[QUOTE=风间仁;1171505]把用到tls的代码贴出来看看(紧接着gethostbyname的那句), 有点奇怪怎么会用到fs:[2C][/QUOTE]
感谢回复!难道是编译器做了手脚,代码如下
__declspec(dllexport) BOOL cache()
{
char szHostName[128] = "netscape.com";
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 0 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return 1;
}
if (gethostbyname(szHostName) != NULL)
{ printf("gethostbyname success:%s\n", szHostName);
return 1;
}
else
{
printf("gethostbyname fail:%s\n", szHostName);
}
printf("After call gethostbyname\n");
return TRUE;
}
能力值:
( LV3,RANK:20 )
6 楼
万分感谢
,按照大侠说的做了果然可以了,哈哈!请问你说的相关知识叫什么来着,有空学习下!