没有DllMain怎么办 用ATL生成一个支持MFC的dll工程,里面没有出现DllMain方法。但我要让这个dll实现线程本地存储,要在DllMain中加一段代码。怎么才能让这个DllMain出现呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我自己写了一个上去,但抱错了MyIeBar error LNK2005: _DllMain@12 已经在 MyIeBar.obj 中定义 atl把WinMain给藏起来了,就像MFC把winmain藏起来一样。你在InitInstance加不行吗? 你再加个WinMain那当然不行了,一个程序怎么能有2个WinMain呢! 说实话,我对com不太熟,只是会用一点.TLS更是如此.看看这个东西http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/using_thread_local_storage_in_a_dynamic_link_library.asp我现在就是要让我的dll在被调用的时候,里面的全局变量不会互相影响.按照MSDN里讲的需要在DllMain中使用TLS,可没了DllMain,我该怎么办? 在DllCanUnloadNow()那个函数所在的cpp中加入BOOL WINAPI DllMain( DWORD dwReason, LPVOID /*lpReserved*/) { switch ( dwReason ) { case DLL_PROCESS_ATTACH: break; default: break; } return TRUE;} 是我给错了。atl中WinMain应该这样声明:extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved){ hInstance; return _AtlModule.DllMain(dwReason, lpReserved); }但是atl中用mfc的话,就会有连接错误,因为atl,mfc中都对DllMain有定义。我觉得你应该去掉mfc支持。 1. 如果你是用Wizard选的ATL工程并且加上了MFC support的,会有一个App类的,和MFC一样,在它的InitInstance()里面加。不会出现两个DllMain,Wizard已经帮你处理好了。2. 如果使用tls的话,你的控件最好不要放到MTA中,否则STA线程访问它时因为经过RPC通道,线程ID每次都不一样,导致根本访问不到正确的TLS数据。 越来越复杂了。我就是想做一个嵌入IE的ToolBar,结果里面的公共变量会互相影响。所以想采用TLS的。我接触com的时间不长,很多东西只知道其然,不知其怎么然。我觉得楼上说的很对,可我怎么才能实现呢?帮忙再讲仔细一点。比如怎么实现STA?要不要在里面实现消息循环?如何在InitInstance中实现dll的TLS? 1. 一般VC wizard做的默认都是STA。会注册为apartment,另外会调用CoInitialize(0).2. TLS的咚咚,如果不是全局变量的话,可以用__declspec(thread),是全局变量的话,用TlsAlloc()那一系列api分配(用__declspec的话如果LoadLibrary加载dll会有问题) 明白一些了,我看了一下我的注册部分,也是将ThreadingModel建置为Appartment的.TlsAlloc该怎么用呢?我现在看到的例子都是放到DllMain里面的,可现在DllMain消失了。如果放到InitInstance中,就没有DWORD fdwReason,LPVOID lpvReserved这两个参数,怎么判断Attach和Dettach呢?是不是支持MFC的ATL工程部可以使用TLS? 1. InitInstance就是Attach, ExitInstance就是Detach2. TLS与是否MFC/ATL无关。直接用底层的API3. TlsAlloc, TlsSetValue, TlsGetValue等等是放到哪儿都可以的,不一定要在DllMain中。 基本上你可以这样。InitInstance里TlsAlloc出来一个index,保存到全局变量中线程中在需要的时候用TlsSetValue和TlsGetValue进行操作ExitInstance里TlsFree 老师让我们在地址栏输入他的IP 如何打开html或者txt文件并控制显示? 招聘软件开发工程师2人、WEB开发工程师1人 !!! 数字、字符、汉字的简单问题! 如何在WIN32下實現文字的淡入淡出效果??? 关于定时器关闭的时机的问题 请问怎样检测一个文件是否存在 请各位帮忙看一下这个程序在VC6。0下怎么运行?(急,在线等) VC中如何实现Excel打印功能 关于套间线程,自由线程。 怎样读取主板的信息(序列号) [MVP] 哇! 2004年新一届MVP出来了,哪个兄弟告诉我,哪一个是薄荷,小弟我真的很崇拜他!!!
MyIeBar error LNK2005: _DllMain@12 已经在 MyIeBar.obj 中定义
你在InitInstance加不行吗?
看看这个东西
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/using_thread_local_storage_in_a_dynamic_link_library.asp
我现在就是要让我的dll在被调用的时候,里面的全局变量不会互相影响.按照MSDN里讲的需要在DllMain中使用TLS,可没了DllMain,我该怎么办?
BOOL WINAPI DllMain(
DWORD dwReason,
LPVOID /*lpReserved*/
) {
switch ( dwReason )
{
case DLL_PROCESS_ATTACH:
break;
default:
break;
} return TRUE;
}
atl中WinMain应该这样声明:
extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
hInstance;
return _AtlModule.DllMain(dwReason, lpReserved);
}但是atl中用mfc的话,就会有连接错误,因为atl,mfc中都对DllMain有定义。
我觉得你应该去掉mfc支持。
2. 如果使用tls的话,你的控件最好不要放到MTA中,否则STA线程访问它时因为经过RPC通道,线程ID每次都不一样,导致根本访问不到正确的TLS数据。
我就是想做一个嵌入IE的ToolBar,结果里面的公共变量会互相影响。所以想采用TLS的。
我接触com的时间不长,很多东西只知道其然,不知其怎么然。我觉得楼上说的很对,可我怎么才能实现呢?帮忙再讲仔细一点。比如怎么实现STA?要不要在里面实现消息循环?如何在InitInstance中实现dll的TLS?
2. TLS的咚咚,如果不是全局变量的话,可以用__declspec(thread),是全局变量的话,用TlsAlloc()那一系列api分配(用__declspec的话如果LoadLibrary加载dll会有问题)
如果放到InitInstance中,就没有DWORD fdwReason,LPVOID lpvReserved这两个参数,怎么判断Attach和Dettach呢?是不是支持MFC的ATL工程部可以使用TLS?
2. TLS与是否MFC/ATL无关。直接用底层的API
3. TlsAlloc, TlsSetValue, TlsGetValue等等是放到哪儿都可以的,不一定要在DllMain中。
InitInstance里TlsAlloc出来一个index,保存到全局变量中
线程中在需要的时候用TlsSetValue和TlsGetValue进行操作
ExitInstance里TlsFree