Tag: delphi

如何使用.Net读取.cds数据库(TClientDataSet)

我有一个用Delphi编写的应用程序的旧数据库文件。 我的任务是提取数据,并将其移动到SQL数据库。 我知道它是.cds格式,它使用Delphi的TClientDataSet-Class。 问题是:我没有Delphi,没有文档,多年前编写应用程序的人离开了公司。 所以,我的问题是:有没有办法(除了Delphi或文本解析)使用Dot.net,Python,Ruby,Java或Perl访问数据? 对XML或CSV的简单“导出”也会起作用。

如何进行点击和透视’永远在顶部’窗口

我想显示一个带有一些信息的半透明的always-on-top窗口,但我不希望这个窗口接受输入或接收焦点。 所有鼠标点击都应该转到底层窗口。 我记得几年前在一个shell替换应用程序中看到这个,但我不能记得女巫。 任何想法如何用delphi或c#实现这种效果? 更新: 我不能完全得到与delphi一起使用的建议解决方案。 为NCHITTEST消息返回HTTRANSPARENT将停止所有到达表单的mousemessages,但是它希望将它以z顺序传递给下一个窗口。 这种方法是否可以跨进程工作,还是仅用于处理特定窗口的childelements? 但是,如果我设置ExStyle标志WS_EX_TRANSPARENT,所有鼠标点击都会进入下一个窗口,但我根本不会收到NCHITTEST消息,并且无法控制窗口应该点击的位置。 ..

在C#中使用Delphi的stuct数组和字符串

我一直在尝试以下列方式调用在Delphi中创建的方法: function _Func1(arrParams: array of TParams): Integer;stdcall; type TParams = record Type: int; Name: string; Amount : Real; end; 我的代码是: [DllImport(“some.dll”, EntryPoint = “_Func1”, CallingConvention = CallingConvention.StdCall)] public static extern int Func( [MarshalAs(UnmanagedType.LPArray, ArraySubType=UnmanagedType.Struct)] TParams[] arrParams) 结构是: [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public struct TParams { public int Type; [MarshalAs(UnmanagedType.AnsiBStr)] public string Name; public double Amount; […]

替代睡在线程内

各种答案表明睡在线程中是一个坏主意,例如: 避免睡眠 。 为什么呢? 经常给出的一个原因是,如果正在hibernate,很难优雅地退出线程(通过发信号通知它终止)。 假设我想定期检查网络文件夹中的新文件,可能每10秒检查一次。 这对于优先级设置为低(或最低)的线程来说似乎是完美的,因为我不希望可能耗时的文件I / O影响我的主线程。 有哪些替代方案? 代码在Delphi中给出,但同样适用于任何multithreading应用程序: procedure TNetFilesThrd.Execute(); begin try while (not Terminated) do begin // Check for new files // … // Rest a little before spinning around again if (not Terminated) then Sleep(TenSeconds); end; finally // Terminated (or exception) so free all resources… end; end; 一个小修改可能是: // Rest […]

将HSV循环代码从Delphi转换为C#

我正在尝试将函数转换为从Delphi到C#创建HSV Circle,但结果不是正确的。 我的目标是为Windows Phone 7做一个应用程序,我只使用WP7.1 SDK和WriteableBitmapEx库。 delphi代码: FUNCTION CreateHueSaturationCircle(CONST size: INTEGER; CONST ValueLevel: INTEGER; CONST BackgroundColor: TColor): TBitmap; VAR dSquared: INTEGER; H,S,V: INTEGER; i: INTEGER; j: INTEGER; Radius: INTEGER; RadiusSquared: INTEGER; row: pRGBTripleArray; X: INTEGER; Y: INTEGER; BEGIN RESULT := TBitmap.Create; RESULT.PixelFormat := pf24bit; RESULT.Width := size; RESULT.Height := size; // Fill with background color […]

如何提供正确定位.NET Dll作为COM提供程序的私有并排清单?

我正在研究一个免费的私有注册WinSxS的配置,它提供了简单的程序集清单文件,在部署和运行时将Delphi可执行文件(COM客户端)和.NET(C#)COM可见DLL组合在一起。 我已经研究了MSDN “与非托管代码互操作”中提供的文档,特别是关于“ COM Callable Wrapper ”和“ 如何:为无注册激活配置基于.NET Framework的COM组件 ”的部分。 经过一个多星期的研究,并且(重新)指导文档不足的周期,我决定在这里提出我的第一个问题。 计划的部署结构如下所示: ./install-root ├───ProgramSuite1 │ ├───bin │ │ DelphiNativeCOMClient1.exe │ │ DelphiNativeCOMClient1.exe.config │ │ DelphiNativeCOMClient2.exe │ │ DelphiNativeCOMClient2.exe.config │ | … │ │ │ └───data │ … ├───ProgramSuite2 │ ├───bin │ │ DelphiNativeCOMClient3.exe │ │ DelphiNativeCOMClient3.exe.config │ │ DelphiNativeCOMClient4.exe │ │ DelphiNativeCOMClient4.exe.config │ | … […]

检查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定制绘图 – 发光玻璃

如何将.NET 4 WinForm应用程序分配给Delphi 7表单的所有者属性?

我需要指定一个.NET 4 Winform应用程序作为Delphi 7表单的所有者。 我在Delphi中创建了一个包含表单的.dll。 Delphi .dll导出用于创建和显示表单的方法。 我已经在我的.NET应用程序中成功加载了Delphi .dll,并显示了表单。 现在我需要能够将.NET应用程序(或.NET应用程序的主要forms)指定为Delphi表单的所有者。 我之前创建了一个Delphi应用程序,它通过COM与.NET交互,并使用以下类将Delphi应用程序指定为.NET表单的所有者: public class WindowHandleWrapper : IWin32Window { public HandleRef m_Handle; public IntPtr Handle { get { return m_Handle.Handle; } } public WindowHandleWrapper(IntPtr handle) { m_Handle = new HandleRef(this, handle); } } Delphi应用程序句柄作为整数传递给WindowHandleWrapper构造函数。 我怀疑解决方案是类似的,例如将句柄传递给Delphi作为整数。 但是,表单的Owner属性的Delphi类型是TComponent。 我只是不确定如何将.NET句柄指定为Delphi表单的所有者。 有任何想法吗?

什么是Delphi MatchesMask函数的C#等价物?

C#.NET中Delphi MatchesMask函数的等价物是什么? 我该如何使用它,以及我需要包含哪些命名空间参考? MatchesMask函数如帮助中所述: 指示文件名是否符合筛选字符串指定的格式。 调用MatchesMask以使用Mask参数检查Filename参数以描述有效值。 有效掩码由文字字符,集合和通配符组成。 每个文字字符必须匹配字符串中的单个字符。 与文字字符的比较不区分大小写。 每组以一个开括号([)开头,以一个右括号(]结束。 括号之间是集合的元素。 每个元素都是文字字符或范围。 范围由初始值,短划线( – )和最终值指定。 不要使用空格或逗号分隔集合的元素。 集必须匹配字符串中的单个字符。 如果字符与集合中的某个文字字符相同,或者如果它在集合中的某个范围内,则该字符与集合匹配。 如果字符与初始值,最终值匹配,或者在两个值之间,则字符在范围内。 所有比较都不区分大小写。 如果集合的左括号后面的第一个字符是感叹号(!),则该集合将匹配集合中不包含的任何字符。 通配符是星号(*)或问号(?)。 星号与任意数量的字符匹配。 问号与单个任意字符匹配。 如果字符串与掩码匹配,则MatchesMask返回true。 如果字符串与掩码不匹配,则MatchesMask返回false。 如果掩码在语法上无效,则MatchesMask会引发exception。 注意:Filename参数不必是文件名。 MatchesMask可用于检查字符串与任何语法正确的掩码。

加载时SideBySide免注册COM失败

我正在尝试创建一个没有COM注册的Delphi应用程序使用的C#COM服务器。 该过程在ms博客上进行了描述- 基于.NET的组件的免注册激活:演练 我创建了必需的清单文件,并将它们链接到程序集。 App Manifest: 和程序集清单: 那些工作正常(我认为)。 sxs不会报告任何错误。 clsid对于com-class也是正确的。 但是在启动应用程序时,它会因为exception0x8013101b而崩溃。 删除清单并在未找到类的exception中运行诅咒的应用结果。 让com-class注册的应用程序开始正常,没有任何错误。 例外可能会说“错误的框架版本”。 我试图在类清单中指定运行时。 但这并没有解决问题。 什么导致例外? 我该如何解决这个问题?