在所有线程当中加上 CoInitializeEx(Nil,COINIT_MULTITHREADED); CoUninitialize; 配对. 例如:... type TMyThread = class(TThread) protected procedure Execute;override; end;implementation uses Activex;procedure TMyThread.Execute; begin CoInitializeEx(Nil,COINIT_MULTITHREADED); try while Not Terminated do begin //这里调用相关DLL函数 end; finally CoUninitialize; end; end;
To 2楼,注意MSDN(http://msdn.microsoft.com/en-us/library/ms695279(VS.85).aspx)下面这段话,其它的我就不多说了. Because there is no way to control the order in which in-process servers are loaded or unloaded, do not call CoInitialize, CoInitializeEx, or CoUninitialize from the DllMain function.
to :unsigned 我现在不明白的是 我是在一个主程序中的botton中执行 dll中的 procedure TF_main.N8Click(Sender: TObject); begin SynAPP(Application.Handle);//DLL中的函数 ShowForm; //DLL中的函数 打开DLL中的一个 form
可以有很多种方式,比如DLL当中第一个被调用的函数返回一个TForm var frmDLL: TForm; begin frmDLL :=DLL_CreateForm(Application.Handle); if frmDLL=Nil then Exit; try frmDLL.ShowModule; finally frmDLL.Free; end; end;
CoInitializeEx(Nil,COINIT_MULTITHREADED);
CoUninitialize;
配对.
例如:...
type
TMyThread = class(TThread)
protected
procedure Execute;override;
end;implementation
uses
Activex;procedure TMyThread.Execute;
begin
CoInitializeEx(Nil,COINIT_MULTITHREADED);
try
while Not Terminated do
begin
//这里调用相关DLL函数
end;
finally
CoUninitialize;
end;
end;
initialization
CoInitialize(nil);
finalization
CoUnInitialize;
在DLL中ADO所以单元最下面加上上面代码即可。
Because there is no way to control the order in which in-process servers are loaded or unloaded, do not call CoInitialize, CoInitializeEx, or CoUninitialize from the DllMain function.
procedure TF_main.N8Click(Sender: TObject);
begin
SynAPP(Application.Handle);//DLL中的函数
ShowForm; //DLL中的函数 打开DLL中的一个 form
end;//////////////////////////////
DLL中 在form create时 有个遍历数据 初始化form中的一个 treeview的数据库操作 //////////////////////////////////////////////////////////////那么我在主程序中 N8Click 应该怎么写那 ?
var
frmDLL: TForm;
begin
frmDLL :=DLL_CreateForm(Application.Handle);
if frmDLL=Nil then Exit;
try
frmDLL.ShowModule;
finally
frmDLL.Free;
end;
end;
有ado 就报错大家都说用
CoInitializeEx(Nil,COINIT_MULTITHREADED);
CoUninitialize; 但是我不清楚应该在那里加
调用dll函数时应该怎么写 郁闷了
大家都是想帮你,有的是直接告诉你答案,有的只是想告诉人学习的方法,望楼主能理解.
在说大家也不知道你的水平,你知道些啥不知道些啥,只是按各自的理解给你了一些他自己的想法和
建议,可能不太符合你想要的,也可能让你觉得伤了自尊心,就让你觉得烦人了.问题是如果这个世界
人都没有人愿意去"烦"你,不知道你是不是会觉得过的更好.有自尊心是好的,但也不能太过了,要区分
事情,过分的自尊心给人的感觉就是自卑,害怕别人说自己的一点不好,总是能听到别人话中带话的贬低
自己.刚开始学计算机的时候,连路径的问题也搞不明白,到机房玩游戏,问人家红警在那里,怎么进去.别
人头也不抬的说一声C盘GAME下,自己都不知怎么去这个地方.将别人敲的字符一个个记下来试来试去才明
白什么盘符啊,命令,执行文件什么,当时没觉得别人有啥不对啊.可能是太想玩游戏了,对别的事情都不在意.至于你的那个问题,在上面各位热心的朋友的帮助下,也应该解决了吧.
其实我才是最烦人的了.