我有一个Delphi DLL,我想在我的应用程序内部加载一个线程(不止一个,确切地说).DLL只是创建一个对象,然后它使用它并销毁它.从这个角度来看,DLL代码是线程安全的.
但是如果我在一个线程中加载该DLL会发生什么?DLL仍然是线程安全的吗?关于加载DLL的线程,我应该知道什么?我已经看到VCL具有在创建线程时设置的IsMultThread属性,但是dll会得到关于此的通知,还是应该手动执行?
假设我TMemoryStream
需要传递给我的DLL并从DLL中获取TMemoryStream
(位图流).
我在想我的DLL会:
procedure Process(
InBuff: Pointer;
InBuffSize: Integer;
var OutBuff: Pointer;
var OutBuffSize: Integer
); stdcall;
Run Code Online (Sandbox Code Playgroud)
该InBuff
很容易(我认为).我通过TMemoryStream.Memory
和TMemoryStream.Size
.
问题是我如何OutBuff
在DLL中分配,并且调用者应用程序可以将其转换回TMemoryStream
以后释放该内存(由调用者应用程序)?
调用者将使用dynamic LoadLibrary
/ FreeLibrary
each DLL调用.
我非常想要一个示例代码.希望我不是太粗鲁.
注1:调用者应用程序不知道输出大小,并假设它不能指定MAX buff大小.
注2:我不确定我的DLL签名.如果我做错了,请原谅我.我正在寻找一种效果很好的模式(也许不仅适用于Delphi而且适用于C++/C#Calller以及=我的奖金)