我有一个DLL,负责一些特殊玻璃效果的自定义绘图。我把它放在一个DLL中有三个原因: 1)因此它可以很容易地重复使用和分发,当然不会权衡其主机应用程序, 2)所以我可以将它分发给开发人员而不知道它是如何工作的,并且 3)所以它可以在C#中使用。它目前在Delphi中工作,但我知道我需要做很多改动才能使它支持C#。例如,主DLL函数包括1个参数(一个Record),它包含了许多我知道在C#中不起作用的类型(如String,也许是TColor)。项目尚未完成100%,但正在发挥作用。
我需要有人指出实现这一目标的最简单方法。代码太大,无法在此处发布,因此 here it is at Pastebin 。
以下是我需要知道的事项:
文件列表:
图书馆:JDGlassLib.dll *
*
包:JDLib.bpl
*
*
程序:JDLibTestApplicationD7.exe
*
单位:JDLibTestAppD7.pas *
(*
=代码包含在上面的链接)
( JDGlassCommon.pas在DLL和Component 中共享)
应该看起来像这样:
注意:我不是要求重写,尽管你非常欢迎。我只需要一些如何解决这个问题的技巧。
PS:原始玻璃绘图代码记入StackOverflow的“NGLN”,回答了我的先前问题:Delphi custom drawing - glowing glass
答案 0 :(得分:1)
我应该像我一样继续使用唱片,还是使用别的东西 喜欢Packed Record?
记录对互操作有好处。不要打包它们,只会使互操作变得更难。
使用String或PChar以外的任何技巧 这些记录?
不要使用字符串。这只是Delphi,甚至特定于Delphi版本。互相支持PChar很好。有时,在记录中使用固定长度的内联字符数组可能是最简单的。这取决于用途。
如何在C#中包装此DLL?
使用p / invoke从C#调用它。
在记录中传递TColor等类型是否安全?
是的,这很容易使用。确保它是真正的RGB颜色,而不是像clWindow那样的特殊颜色。
您是否预见到我的代码中存在任何其他问题?
玻璃渲染可能与C#库使用的渲染不兼容。它很可能取决于您的C#代码是否使用WinForms或WPF。事实上,您可能会发现C#开发人员会发现使用本机C#代码更容易。我希望玻璃渲染在常见的C#GUI框架中得到很好的支持。