我有一个DLL,它负责一些特殊的玻璃效果的定制绘图。我把它放在DLL中有三个原因:1),这样就可以很容易地重用和分发它,当然不需要对其主机应用程序进行称量;2),这样我就可以分发给开发人员,而不需要他们知道它是如何工作的;3),这样就可以从C#中使用它。它目前在Delphi中工作,但我知道我需要做很多修改才能使它支持C#。例如,主DLL函数包含一个参数(一个记录),它包含一些我知道在C#中不能工作的类型(比如String,可能还有TColor)。项目还没有完全完成,但正在工作。
我需要有人指出最简单的方法来实现这一点。代码太大,无法在这里全部发布,所以在巴斯丁。
,我需要知道的是:
文件列表:
图书馆: JDGlassLib.dll *
*包: JDLib.bpl
**程序: JDLibTestApplicationD7.exe
**
(* =代码包含在上面的链接中)
(JDGlassCommon.pas在DLL和组件中共享)应该是这样的:

注意:,我不是在要求重写,尽管我们非常欢迎您的加入。我只需要一些关于如何处理这件事的建议。
PS:原始玻璃绘图代码,归功于StackOverflow的"NGLN“,回答了我先前的一个问题:特尔斐自定义绘图-发光玻璃
发布于 2011-11-28 07:35:40
我应该继续使用我的记录,还是使用其他的东西,如包装记录?
记录对互操作很有好处。别把它们打包,这只会让互操作变得更难。
在这些记录中使用字符串或PChar以外的东西有什么窍门吗?
不要用绳子。这只是Delphi,甚至特定于Delphi版本。PChar可以用于互操作。有时,在记录中使用固定长度的内联字符数组是最简单的。这取决于使用情况。
如何在C#中包装这个DLL?
使用p/invoke从C#调用它。
在记录中传递诸如TColor之类的类型安全吗?
是的,这很容易处理。确保它是真正的RGB颜色,而不是像clWindow这样的特殊颜色。
您预见到我的代码中还有其他问题吗?
玻璃渲染很可能与C#库使用的呈现不兼容。这很可能取决于您的C#代码是使用WinForms还是WPF。实际上,您可能会发现C#开发人员会发现使用本机C#代码更容易。我希望普通的C#图形界面框架能够很好地支持玻璃渲染。
https://stackoverflow.com/questions/8291669
复制相似问题