Tag: delphi 7

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

我有一个DLL,负责一些特殊的玻璃效果的自定义绘图。 我把它放在一个DLL中有三个原因: 1)因此它可以很容易地重复使用和分发,当然不会权衡它的主机应用程序, 2)所以我可以将它分发给开发人员,而他们不知道它是如何工作的, 3)因此它可以从C#中使用。 它目前在Delphi中工作,但我知道我需要做很多改动才能使它支持C#。 例如,主DLL函数包含1个参数(一个Record),其中包含许多我知道在C#中不起作用的类型(如String,也许是TColor)。 项目尚未完成100%,但正在运作。 我需要有人指出实现这一目标的最简单方法。 代码太大了,不能在这里发布,所以这里是在Pastebin 。 这是我需要知道的: 我应该像我一样继续使用唱片,还是使用像Packed Record这样的其他东西? 在这些记录中使用除String或PChar之外的其他东西的任何技巧? 我如何在C#中包装此DLL? (顺便说一句,我知道C#很少) 如何定义等效记录传递给DLL函数? 如何在C#中定义等效常量? (JD#ClassCommon.pas的C#版本) 如何获取要发送到DLL的canvas句柄(HDC)和父句柄(HWND)? 什么相当于TColor? 在记录中传递TColor等类型是否安全? 您是否预见到我的代码中的任何其他问题? 文件列表: 库:JDGlassLib.dll * 单位:JDGlassCommon.pas * 包:JDLib.bpl 单位:JDGlassCommon.pas * 单位:JDGlass.pas * 程序:JDLibTestApplicationD7.exe 表格:JDLibTestAppD7.dfm * 单位:JDLibTestAppD7.pas * ( * =代码包含在上面的链接中 ) ( JDGlassCommon.pas在DLL和Component中共享 ) 应该看起来像这样: 注意:我不是要求重写,尽管你非常欢迎。 我只需要一些如何解决这个问题的技巧。 PS:原始玻璃绘图代码记入StackOverflow的“NGLN”,回答我的先前问题: delphi定制绘图 – 发光玻璃

访问Delphi DLL抛出exceptionexception

当我调用Dll方法时,它有时会引发exception,有时则不会。 我这样称呼它: public class DllTest { [DllImport(@”MyDll.dll”)] public extern static string MyMethod(string someStringParam); } class Program { static void Main(string[] args) { DllTest.MyMethod(“SomeString”); } } 我有时得到的例外是: AccessViolationException 尝试读取或写入受保护的内存。 这通常表明其他内存已损坏。 有没有人知道我为什么有时会得到这个例外? 为什么有时会顺利运行?