我在这个页面上看到动态数组需要ShareMem单元才能正常工作.
不过,我想为其他语言编写一个dll.
谁能告诉我如何声明函数及其参数来传递String数组?
没有ShareMem,是不是真的不允许这样的事情?
var
templates : array of WideString;
begin
SetLength(templates, 2);
templates[0] := 'template1';
templates[1] := 'template2';
end
DLLFunction(@templates[0]);
Run Code Online (Sandbox Code Playgroud)
感谢帮助!
我有一个应用程序,它创建一个通过Windows消息与主UI通信的线程.它只是将消息发送到主应用程序线程并收到状态.
这样我就可以显示模态窗口并执行其他操作.
问题是当我必须显示一个调用com +服务器的表单时.这样我就得到了OLE错误8001010D:由于应用程序正在调度输入同步调用,因此无法进行传出调用.
我认为这是因为主要的SendMessage正在使用中,而且com +调用需要为其任务执行Windows消息传递.
无论如何,在delphi中我无法从线程中显示表单,但是我如何解决问题...?
谢谢
A.线程(2)向主线程(1)发送消息B.主线程(1)接收消息,在让它返回线程之前显示窗口.C.主线程中的模态窗口想要进行com +调用,发生上述错误.
模态窗口在哪个线程?2. COM调用来自哪个线程?3.实例化COM对象的哪个线程?4.后台线程是否使用STA初始化?5.模态表单是否从SendMessage处理程序中显示? - 罗马R. 2分钟前
生产平台上出现了奇怪的问题(64位win 2008服务器).它File.Exists
与File.Delete
方法有关......
在调试的测试平台(win xp)等,它工作正常.在Server 2008上
File.Exists
报告true
的文件最初几次不存在...
当我进行进一步测试时,File.Exists
最终报告错误的文件不存在.
但是File.Delete
在尝试删除不存在的文件时没有抛出任何错误...
怎么了 ... ?
我在某处看到系统虚拟化可能会搞砸了......但是还没有找到任何文件: %userprofile%\AppData\Local\VirtualStore
任何人都可以为我提供通过参数将任意数量的字节传递给dll函数的工作示例吗?
我想在没有任何额外内存单元的情况下完成它,只需要在基本的Windows类型上运行.
我需要每次调用"发送"大约300 kb的数据.
客户端分配的内存是否也应该在客户端免费?
我有一个函数,它创建指向Stream数据的指针.
function StreamToByteArray(Stream: TStream): Pointer;
var
ByteArr: array of Byte;
begin
if Assigned(Stream) then
begin
Stream.Position := 0;
SetLength(ByteArr, Stream.Size);
Stream.Read(ByteArr[0], Stream.Size);
end
else
SetLength(ByteArr, 0);
result := @ByteArr[0];
end;
Run Code Online (Sandbox Code Playgroud)
如何将其转换回来,从指针转换为动态字节数组,然后将内容保存到流中.或者也许可以直接从指针加载流?
感谢帮助.