相关疑难解决方法(0)

Delphi DLL - 线程安全

我有一个Delphi DLL,我想在我的应用程序内部加载一个线程(不止一个,确切地说).DLL只是创建一个对象,然后它使用它并销毁它.从这个角度来看,DLL代码是线程安全的.

但是如果我在一个线程中加载该DLL会发生什么?DLL仍然是线程安全的吗?关于加载DLL的线程,我应该知道什么?我已经看到VCL具有在创建线程时设置的IsMultThread属性,但是dll会得到关于此的通知,还是应该手动执行?

delphi dll multithreading

6
推荐指数
2
解决办法
4823
查看次数

如何从我的应用程序传递和检索内存流到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.MemoryTMemoryStream.Size.

问题是我如何OutBuff在DLL中分配,并且调用者应用程序可以将其转换回TMemoryStream以后释放该内存(由调用者应用程序)?

调用者将使用dynamic LoadLibrary/ FreeLibraryeach DLL调用.

我非常想要一个示例代码.希望我不是太粗鲁.

注1:调用者应用程序不知道输出大小,并假设它不能指定MAX buff大小.

注2:我不确定我的DLL签名.如果我做错了,请原谅我.我正在寻找一种效果很好的模式(也许不仅适用于Delphi而且适用于C++/C#Calller以及=我的奖金)

delphi dll delphi-7

3
推荐指数
1
解决办法
1912
查看次数

标签 统计

delphi ×2

dll ×2

delphi-7 ×1

multithreading ×1