首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查Delphi在C#中使用的安全性

检查Delphi在C#中使用的安全性
EN

Stack Overflow用户
提问于 2011-11-28 04:55:09
回答 1查看 378关注 0票数 0

我有一个DLL,它负责一些特殊的玻璃效果的定制绘图。我把它放在DLL中有三个原因:1),这样就可以很容易地重用和分发它,当然不需要对其主机应用程序进行称量;2),这样我就可以分发给开发人员,而不需要他们知道它是如何工作的;3),这样就可以从C#中使用它。它目前在Delphi中工作,但我知道我需要做很多修改才能使它支持C#。例如,主DLL函数包含一个参数(一个记录),它包含一些我知道在C#中不能工作的类型(比如String,可能还有TColor)。项目还没有完全完成,但正在工作。

我需要有人指出最简单的方法来实现这一点。代码太大,无法在这里全部发布,所以在巴斯丁

,我需要知道的是:

  • 我应该继续使用我的记录,还是使用其他的东西,如包装记录?
  • 在这些记录中使用字符串或PChar以外的东西有什么窍门吗?
  • 如何在C#中包装这个DLL?(顺便说一句,我对C#知之甚少)
    • 如何定义等效记录以传递给DLL函数?
    • 如何在C#中定义等效常数?(C#版本的JDGlassCommon.pas)
    • 如何将画布句柄(HDC)和父句柄(HWND)发送到DLL?
    • 什么是TColor?

  • 在记录中传递诸如TColor之类的类型安全吗?
  • 您预见到我的代码中还有其他问题吗?

文件列表:

图书馆: JDGlassLib.dll *

  • 单位: JDGlassCommon.pas *

包: JDLib.bpl

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

程序: JDLibTestApplicationD7.exe

  • 形式: JDLibTestAppD7.dfm *
  • 单元: JDLibTestAppD7.pas * (* =代码包含在上面的链接中) (JDGlassCommon.pas在DLL和组件中共享)

应该是这样的:

注意:,我不是在要求重写,尽管我们非常欢迎您的加入。我只需要一些关于如何处理这件事的建议。

PS:原始玻璃绘图代码,归功于StackOverflow的"NGLN“,回答了我先前的一个问题:特尔斐自定义绘图-发光玻璃

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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#图形界面框架能够很好地支持玻璃渲染。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8291669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档