导航:
论坛 -> DELPHI技术
斑竹:liumazi,sephil
作者:
2022/11/23 20:06:25
标题:
请教关于DELPHI调用C#编写DLL库问题
浏览:1639
加入我的收藏
楼主:
关于使用DELPHI调用C#编写的DLL库原来没有玩过,我按搜索的资料进行了尝试,但不能成功,想请教各位看看能否指点一下 【以下是C#编写的DLL库信息】 DLL文件名称:DaioPrgInterface.dll 别人提供给我的说明如下: public class Auxiliary public string GetInterfaceVersion() 当然,还有很多的信息,我只贴了这一个 我按教程的信息是这么编写的代码,但是会报错,因为没有玩过,所以不清楚发生了什么事情 var Obj:Variant; InterfaceVersion:string; begin Obj:=CreateOleObject('DaioPrgInterface.Auxiliary'); InterfaceVersion:=Obj.GetInterfaceVersion; ShowMessage(InterfaceVersion); Obj.free; 报错的信息如下:
此帖子包含附件: 大小: 3,867B
----------------------------------------------
【个人签名】:玩了多年DELPHI,终于从菜鸟升级成老菜鸟
作者:
2022/11/23 20:23:22
1楼:
read this: https://stackoverflow.com/questions/49026910/how-to-use-a-dll-created-with-c-sharp-in-delphi https://stackoverflow.com/questions/6174584/call-c-sharp-dll-from-delphi
----------------------------------------------
The higher the degree, the greater the respect given to the humblest!RAD 11.3
作者:
2022/11/24 8:41:29
2楼:
我换了一种方式如下: function GetInterfaceVersion:string; stdcall; external 'DaioPrgInterface.dll'; 然后在按钮的点击事件中这样写: procedure TForm1.Button2Click(Sender: TObject); begin ShowMessage(GetInterfaceVersion); end; 同样也出现了错误,是否C#输出的DLL文件有输出的要求呢?
此帖子包含附件: 大小: 7.0K
----------------------------------------------
【个人签名】:玩了多年DELPHI,终于从菜鸟升级成老菜鸟
作者:
hsj (hsj)
★☆☆☆☆
-
盒子活跃会员
2022/11/24 13:41:09
3楼:
都是c#调用delphi的dll,你这么弄没搞过,如果C#的dll是你自己写的话,写成exe,delphi里直接运行exe不更简单?
----------------------------------------------
qq:171833017,靖源软件http://www.dxmylove.com
作者:
2022/11/25 1:18:54
4楼:
第二种肯定不行,因为你写的是COM类型的DLL,第一种,假设没有其他问题,运行过regsvr32注册DLL了么?
----------------------------------------------
-
作者:
2022/11/25 10:13:56
5楼:
我也调用过公司未曾谋面的某前辈大佬用C#写的dll(据说大佬去华为了,离职的时候没有交接关键的dll源代码),嫌调试太麻烦,我直接用.Net Reflector 反编译出了C#代码,然后翻译成了Pascal代码,问题完美解决!
----------------------------------------------
《Z-Gantt智慧时间管理进度计划甘特图软件》:WWW.Z-SHi.NET
作者:
2022/11/25 10:59:52
6楼:
C# 用DNSpy 直接开源码,咋弄都行。
----------------------------------------------
相信自己,若自己都不相信,那还有谁可信。
作者:
2022/11/25 14:27:59
7楼:
C#调用的常见于COM方式,不过这个要注册dll才可以。 不注册dll的话,可以看看这里: DDNRuntime-Delphi调用.NET的库(非COM方式调用Framework和Core) http://bbs.2ccc.com/topic.asp?topicid=621485
----------------------------------------------
-
作者:
2022/11/26 14:25:26
8楼:
jcvl 也能调用c#写的dll,不需要系统注册...
----------------------------------------------
相信自己,若自己都不相信,那还有谁可信。
作者:
2022/11/28 12:02:29
9楼:
因为这个C#的DLL是设备厂商提供的,有一份涵数调用说明,但我尝试了好几种方式都无法调用成功
----------------------------------------------
【个人签名】:玩了多年DELPHI,终于从菜鸟升级成老菜鸟
作者:
2022/11/28 13:44:47
10楼:
我担心是之前的DLL文件有问题,重新做了一个C#的DLL文件, 【C#里面的编码如下】: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace mydll { public class mydll { public static double myfunction(double a1, double a2) { return (a1 + a2); } } } 【然后我在DELPHI中这样调用的】: var Obj:Variant; i:Double; begin Obj:=CreateOleObject('mydll.mydll'); i:=obj.myfunction(12,15); ShowMessage(FloatToStr(i)); Obj.free; 报的错误与题目内容是一样的 换成下面这种方法,错误也是一样 implementation function myfunction(a1,a2:double):double; stdcall; external 'mydll.dll'; procedure TForm1.Button2Click(Sender: TObject); var i:Double; begin i:=myfunction(12,15); ShowMessage(FloatToStr(i)); end; 麻烦各位高手指点一下,有什么是我没有做的吗?
----------------------------------------------
【个人签名】:玩了多年DELPHI,终于从菜鸟升级成老菜鸟
作者:
2022/11/28 14:34:00
11楼:
我对C#的源码又进行了一下修改,改成下面这样: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace mydll { public class mydll { public interface Imydll { void myfunction(double a1, double a2); } public static double myfunction(double a1, double a2) { return (a1 + a2); } } } 然后我做了一个bat文件进行DLL注册 @echo 开始注册 regsvr32 mydll.dll /s @echo 注册成功 @pause 在DELPHI里面调用的方法不变,错误依旧存在 现在不清楚是什么原因了
----------------------------------------------
【个人签名】:玩了多年DELPHI,终于从菜鸟升级成老菜鸟
作者:
2022/11/28 18:26:04
12楼:
请看看这篇文章: https://www.cnblogs.com/huangcong/archive/2010/10/06/1844542.html
----------------------------------------------
-
作者:
2022/11/29 10:27:10
13楼:
这个文章够细致得了!! https://blog.csdn.net/m0_37876197/article/details/121339364?spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down_v2.none-task-blog-2~default~OPENSEARCH~Rate-2-121339364-bbs-270076611.pc_relevant_bbs_down_v2_default&depth_1-utm_source=distribute.pc_relevant_bbs_down_v2.none-task-blog-2~default~OPENSEARCH~Rate-2-121339364-bbs-270076611.pc_relevant_bbs_down_v2_default
----------------------------------------------
-
作者:
2022/11/29 13:38:30
14楼:
C#导出的类和函数的声明上缺attribute声明 13. [Guid("154BD6A6-5AB8-4d7d-A343-0A68AB79470B")] 14. 15. public interface MyCom_Interface 16. 17. { 18. 19. [DispId(1)] 20. 21. int Add(int a, int b); 22. }
----------------------------------------------
-
作者:
2022/11/29 15:56:25
15楼:
1.C# 不能编写标准DLL 文件 所以 想不动C#源码 实现调用 除非调用CLR 也就是那些号称可以调用C#的组件 都是收费的 2.C#可以编写COM DLL 然后通过注册 不是常规的reg32 而是注册.net程序集 regasm 好像叫这个 然后才可以通过对象调用 3.厂商提供的C# DLL的话 你要问清楚支不支持 COM 如果不支持那么久不能调用。 或者问清楚支不支持除了C#之外的语言也可以 4.可能的解决方案是 假设提供的DLL不能直接用 那么可以考虑自己重新写一个C# DLL 来包装成COM 这样达到调用的效果。
----------------------------------------------
-