5,943
社区成员
发帖
与我相关
我的任务
分享例如创建一个dll项目(dll.dpr),写了一个类:
TMyCls=class
public
procedure foo();
end;
我在另一个项目(test.dpr)里引入这个dll,就可以这样调用:
cls=TMyCls.Create(); cls.foo();
Delphi现在只有两种dll,一种是dynmatic dll,那种要exports声明的,调用时也只能是函数式调用,无法直接使用里面的类,太麻烦不适用
第2种是activx dll,但是必须要设计ridl,增加类名,方法名接口等,我有很多方法这样添加很麻烦
我想起c#的dll类库很方便,好像写好类实现后,编译成dll,另一项目引入,就可以直接TMyCls.Create出来用了,谢谢!


C#现在使用的应用还多吗
可以,但得换个思路,因为 Delphi 的原生 DLL 和 C# 的类库机制不一样。
C# 那种“引入 dll 直接 new 类”靠的是 CLR 元数据。Delphi 原生 dll 导出的是函数符号,类本身不会自动暴露。几种可行路线:
1)调用方也是 Delphi:最省事,直接把 .pas 单元加进工程一起编译,或者打成 runtime package(BPL),效果和引用类库差不多,还没有导出声明的麻烦。
2)要跨语言(给 C++/C# 用):别导类,导一组 C 风格函数。例如暴露 CreateXxx 返回对象指针、再用 DestroyXxx 让 Delphi 自己释放,调用方包一层就能当类用。跨语言最稳。
3)要语言无关且“注册表式”:走 COM/ActiveX,确实要写 RIDL 和接口,你嫌麻烦是对的,方法多时可以用向导先生成骨架再填。
如果只是自己项目里用,方案 1 基本零成本;要给别人用,方案 2 比折腾 ActiveX 实在。你调用方是什么语言?
注意一点:Delphi 导出的类实例内存由 Delphi 的堆管理,跨模块释放要在同一运行时里,最好提供 Destroy 函数让 Delphi 自己释放,别让外部直接 Free。
你问的是「Delphi可不可以制作出像c#那样的dll类库?」,我结合实操说几句。
先定位是哪一层的问题:环境/依赖、代码逻辑、还是模型/服务本身。算法的坑大多集中在环境版本和配置。
建议的最小排查路径:① 用官方最小示例复现,确认基线能跑;② 逐步替换成你的代码/数据,每步可验证;③ 看日志里第一条报错往上溯源,别被后面的连锁报错带偏。
把报错信息和最小复现代码贴出来,能更快帮你 pinpoint。
以上是基于常见落地经验的判断,不一定全对。你那边具体是什么场景/报错?评论区说下,我帮你看。
很好用的资源,非常感谢大佬们的分享
感谢楼主分享
感谢楼主分享
感谢分享,共同学习
怎么才能获得积分
666学习一下。
还在用delphi吗
建议你专业学习一门编程软件吧
你好
21212
感谢楼主分享
不错不错
不错不错!!1
学习了解了,感谢分享
啊啊啊啊啊
可以。Delphi 完全能够制作出功能上类似于 C# .dll 类库的动态链接库(DLL)。 不过,两者的底层机制不同:C# DLL 是托管代码,依赖 .NET 运行时;而 Delphi 生成的是原生机器码 DLL,不依赖 .NET。要在 Delphi DLL 中实现类似 C# 的面向对象功能(类、方法、属性)并供其他语言(如 C#)调用,推荐使用两种健壮的方式:
感谢分享,前排学习