2011-11-28 36 views
0

我有一个DLL这需要照顾的自定义绘制的一些特殊的玻璃特效。我把它在一个DLL,原因有三:1)所以可以很容易地重新使用和分配过程中的不重其主机应用程序下来,2)这样我就可以分发到开发商没有他们知道如何它的工作原理和3)因此它可以从C#中使用。它目前在Delphi中工作,但我知道我需要做很多更改才能支持C#。例如,主DLL函数包含1个参数(一个记录),其中包含我知道不会在C#中工作的许多类型(如String和TColor)。项目还没有完全完成,但正在工作。检查德尔福DLL的安全性,在使用C#

我需要有人指出,最简单的方法来实现这一点。代码太大,无法在此发布,因此here it is at Pastebin

这就是我需要知道:

  • 我应该继续使用记录,因为我,或者用别的东西像盒装记录?
  • 任何技巧在这些记录中使用String或PChar之外的其他技巧?
  • 如何将这个DLL包装在C#中? (我知道的方式非常小C#)
    • 如何定义等同记录传递给DLL函数?
    • 如何在C#中定义等效常量? (JDGlassCommon.pas的C#版本)
    • 如何获得画布句柄(HDC)和父句柄(HWND)发送到DLL?
    • 什么会等同于TColor?
  • 它是安全的传递类型,如TColor的记录?
  • 你是否预见到我的代码中有其他问题?

文件列表:

库:JDGlassLib.dll*

  • 单位:JDGlassCommon.pas *

套餐:JDLib.bpl

  • 单位:JDGlassCommon.pas *
  • 单位:JDGlass.pas *

计划:JDLibTestApplicationD7。exe文件

  • 形式:JDLibTestAppD7.dfm *
  • 单位:JDLibTestAppD7.pas *

    *=代码被包括在上述连结

    JDGlassCommon.pas在DLL和组件中共享

应该是这个样子: Should look like this

注:我不要求重新写,虽然你比欢迎更多。我只需要一些关于如何解决这个问题的提示。


PS:StackOverflow上的贷记“NGLN”原稿玻璃绘图代码回答我的前一个问题:Delphi custom drawing - glowing glass

+0

我希望StackOverflow会强制人们输入一个解释评论,当downvoting ... –

回答

1

我应该继续使用记录,因为我,或者用别的 像包装记录?

记录对互操作性很好。不要打包它们,这会让互操作变得更困难。

这些记录中的任何技巧使用除String或PChar之外的其他东西吗 这些记录?

请勿使用字符串。这只是德尔福,甚至专用于Delphi版本。 PChar适合互操作。有时在记录中使用固定长度的内联字符数组可能是最简单的。这取决于用途。

如何将这个DLL包装在C#中?

使用p/invoke从C#调用它。

在记录中传递TColor等类型是否安全?

是的,这很容易处理。确保它是一个真正的RGB颜色,而不是像clWindow这样的特殊颜色。

您是否预测到我的代码中存在其他问题?

玻璃渲染可能与C#库使用的渲染不兼容。这很可能取决于您的C#代码是否使用WinForms或WPF。事实上,您可能会发现C#开发人员会发现使用本机C#代码更容易。我期望在常见的C#GUI框架中很好地支持玻璃渲染。

+0

谢谢吨,但我应该已经更具体与'我将如何包装这个DLL在C#中? 。另外,不知道'p/invoke'的含义是什么(我是C#dummy) –

+1

从该术语的websearch开始。然后在微小的dll上尝试一下。然后在这里提出具体问题。你也应该熟悉C#。您的编辑似乎在要求某人为您编写密码代码。我不会那样做。也许别人会。最好的办法是让你尝试自己,问问自己什么时候卡住了。但请请从简单的东西开始学习! –

+0

发现这篇文章非常有用:http://www.glennstephens.com.au/tech/CSharp4DelphiDevelopers.pdf –