Tag: delphi

获取当前鼠标光标类型

如何获取当前的GLOBAL鼠标光标类型(沙漏/箭头/ ..)? 在Windows中。 全局 – 即使鼠标位于我的应用程序之外,或者即使我的程序是无风的,我也需要它。 在C#,Delphi或纯winapi,没关系…… 非常感谢你提前!!

当从Delphi传递给C#作为函数参数时,空字符串变为null

我有一个原生的Delphi exe,它通过COM interop调用C#dll。 以下是演示此问题的最简单案例: delphi: IClass1 = interface(IDispatch) [‘{B29BAF13-E9E4-33D7-9C92-FE28416C662D}’] function Test(const aStr: WideString): WideString; safecall; end; var obj: IClass1; s: string; begin obj := CoClass1.Create as IClass1; s := obj.Test(”); // Returns ‘[null]’ end; C#: [ComVisible(true)] public interface IClass1 { string Test(string aStr); } [ComVisible(true)] public class Class1 : IClass1 { public string Test(string aStr) […]

从c#调用dll中的Delphi方法

我试图使用以下签名调用Delphi DLL中的方法: function SMap4Ovr(const OverFileName : ShortString ; const Aclay : Integer ; const Acarbon : Double ; out errstr : ShortString): WordBool; 我在C#中使用以下导入: [DllImport(“SMap.dll”, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)] public static extern bool SMap4Ovr( string OverFileName, int Aclay, double Acarbon, out string errstr ); 但我得到一个AccessViolationException。 我似乎能够在DLL中调用几个更简单的方法,这些方法有字符串参数但不是整数或双精度数。 我也试过CallingConvention = CallingConvention.Cdecl,但这给了我同样的错误。

加密字符串从Delphi到C#

我试图用Delphi Encryption Compendium中的Cipher1 3.0,第一部分解密在Delphi中加密的c#中的一个字符串。 我使用TCipher_Rijndael。 我加密的字符串是:this-is-a-test-example 密码:通过 加密值为:iKBC8kX4ZEk4A1pCj6jwEegqjpxhqw == 当我尝试在c#中解密时,我发现错误:要解密的数据长度无效。 有没有人有同样的问题,什么是解决方案? 这是c#中的解密方法: public static byte[] Decrypt(byte[] cipherData, byte[] Key, byte[] IV) { MemoryStream ms = new MemoryStream(); Rijndael alg = Rijndael.Create(); alg.Key = Key; alg.IV = IV; CryptoStream cs = new CryptoStream(ms, alg.CreateDecryptor(), CryptoStreamMode.Write); cs.Write(cipherData, 0, cipherData.Length); cs.Close(); byte[] decryptedData = ms.ToArray(); return decryptedData; } […]

ASP.NET Web应用程序在IIS Web服务器上调用Delphi DLL,在返回PChar字符串时锁定

如果我不返回任何内容,则工作正常,或者返回一个整数。 但如果我试图返回一个PChar,即… result := PChar(”) or result:= PChar(‘Hello’) 网络应用程序只是冻结,我看到它的内存计数在任务管理器中逐渐变得越来越高。 奇怪的是,DLL在VStudio调试服务器或C#应用程序上运行良好。 我唯一能想到的就是IIS服务器在64位Windows上运行。 它似乎不是一个兼容性问题,因为我可以成功写入文本文件并从DLL中执行其他操作…我只是不能返回一个PChar字符串。 尝试使用PWideChar,尝试返回’something \ 0’,尝试了我能想到的一切。 不幸的是没有运气。 [DllImport(“TheLib.dll”, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)] private static extern string SomeFunction(); string result = SomeFunction(); delphi: library TheLib; function SomeFunction() : PChar export; stdcall; begin return PChar(”); end; exports SomeFunction

如何使用C#调用接收Delphi开放数组参数的函数?

如何将Delphi代码转换为C#? 它需要一个array of Byte ,但我不确定C#的等价物是什么。 我的尝试不起作用,并抛出像AccessViolationException之类的exception。 delphi: function SetLevel(a: array of byte): boolean; stdcall; external ‘DMX510.dll’; C#: [DllImport(“DMX510.DLL”)] public static extern Boolean SetLevel(Byte[] bytearray); Byte[] byteArray = new Byte[5]; byteArray[1] = 75; SetLevel(byteArray);

从C#Code调用delphi DLL方法

我试图从C#ASP.NET代码调用Delphi函数。 函数的声明如下所示: function SomeFunction(const someString, SomeOtherString: string): OleVariant; 从我的C#代码我有这个代码: [DLLImport(MyDLL.dll”, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)] public static extern object SomeFunction(string someString, string SomeOtherString); 每次我调用此方法并将其存储为对象时,我都会收到P / Invoke错误。 我之前从未调用过C#中的非托管代码,所以我有点不知所措。

有什么工具可以将Delphi 7应用程序转换为C#和.Net框架?

我维护了一个用Delphi 7编写的旧PC应用程序。虽然Delphi过去很好地服务于我,但我现在只将它用于这个应用程序,并发现我的技能随着语言的减少而减少。 它的语法与我在Java / Ruby的“日常工作”语言上有太大的不同,所以我需要更长时间才能进入编写新代码的过程中,而且它已经很老了我没有使用过很多接口,因此代码不能管理我现在看起来很古老! 我的许多用户都转向使用兼容模式运行应用程序的Vista,或者可能有GPF问题,这取决于他们的IT部门如何配置他们的PC,因此我必须对应用程序进行一些维护。 我想知道我是否应该跳到更熟悉的堆栈。 是否有一个自动化工具可以完成将代码库转换为C#的工作,让我专注于任何非标准组件的转换? 我正在使用一个名为AbsoluteDatabase的嵌入式数据库组件,该组件兼容BDE并使用标准SQL,以及本机Delphi HTML浏览器组件,可以与Microsoft世界中的某些东西进行交换。 这些转换工具有多好?

如何使用Delphi 2007中的非IIS托管,WCF,C#Web服务?

我编写了一个相当简单的小型C#Web服务,通​​过WCF从独立的EXE托管。 代码 – 有点简化 – 看起来像这样: namespace VMProvisionEXE { class EXEWrapper { static void Main(string[] args) { WSHttpBinding myBinding = new WSHttpBinding(); myBinding.Security.Mode = SecurityMode.None; Uri baseAddress = new Uri(“http://bernard3:8000/VMWareProvisioning/Service”); ServiceHost selfHost = new ServiceHost(typeof(VMPService), baseAddress); try { selfHost.AddServiceEndpoint(typeof(IVMProvisionCore), myBinding, “CoreServices”); ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); smb.HttpGetEnabled = true; smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy12; selfHost.Description.Behaviors.Add(smb); // Add […]

如何可靠地在所有版本的Windows上读取用户的显示(第一个和最后一个)名称?

我发现在Windows 7 64位上,在具有域名的机器上,GetUserNameEx(3,….)应该将扩展名称格式DisplayName(== 3)放入缓冲区,工作正常。 但是,它不适用于Windows 7 32位,工作组上的vm,而不是域,它返回ERROR_NONE_MAPPED。 例如,你如何以一种适用于Windows的方式阅读该人的友好名称“Fred Smith”? GetUserNameEx显然已损坏。 实际上,没有破坏,我被告知,只是不打算为不在域上的用户工作。 我想知道为什么不存在本地SAM信息? 并且似乎没有其他直接API来执行此操作。 如果Windows为您提供ERROR_NONE_MAPPED,那么您运气不佳,可能不在域上。 所以这不是API的友好领域。 [看起来,有可能调用NetUserGetInfo来读取本地SAM信息,当不在域上时,但您需要首先知道用户名和密码,然后它可能会查找友好名称。] 相关问题:这里没有提到问题