Delphi可不可以制作出像c#那样的dll类库?

tonylll 2024-08-02 01:00:11

例如创建一个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出来用了,谢谢!

 

 

 

 

 

...全文
154717 278 打赏 收藏 转发到动态 举报
写回复
用AI写文章
278 条回复
切换为时间正序
请发表友善的回复…
发表回复
TianXuan_Chain 2024-12-09
精选
  • 打赏
  • 举报
回复
50.00元
10

C#现在使用的应用还多吗

谢邂559 2025-01-19
  • 举报
回复 2
@TianXuan_Chain 1
谢邂559 2025-02-08
  • 举报
回复 2
@谢邂559 en
谢邂559 2025-02-08
  • 举报
回复
@谢邂559 1
8条回复
AI向善 08-25 09:51
  • 打赏
  • 举报
回复

可以,但得换个思路,因为 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。

AI向善 08-24 15:40
  • 打赏
  • 举报
回复

你问的是「Delphi可不可以制作出像c#那样的dll类库?」,我结合实操说几句。

先定位是哪一层的问题:环境/依赖、代码逻辑、还是模型/服务本身。算法的坑大多集中在环境版本和配置。
建议的最小排查路径:① 用官方最小示例复现,确认基线能跑;② 逐步替换成你的代码/数据,每步可验证;③ 看日志里第一条报错往上溯源,别被后面的连锁报错带偏。
把报错信息和最小复现代码贴出来,能更快帮你 pinpoint。

以上是基于常见落地经验的判断,不一定全对。你那边具体是什么场景/报错?评论区说下,我帮你看。

「已注销」 07-06 18:55
  • 打赏
  • 举报
回复

很好用的资源,非常感谢大佬们的分享

2301_79386209 06-24 16:31
  • 打赏
  • 举报
回复

感谢楼主分享

m0_69155363 05-28 15:52
  • 打赏
  • 举报
回复

感谢楼主分享

m0_69155363 05-28 15:51
  • 打赏
  • 举报
回复

感谢分享,共同学习

  • 打赏
  • 举报
回复

怎么才能获得积分

  • 打赏
  • 举报
回复

666学习一下。

ぢ 好好学习 05-07 16:06
  • 举报
回复
@放开那个姑娘让我来 1
ぢ 好好学习 05-07 16:12
  • 举报
回复
@放开那个姑娘让我来 2222
ぢ 好好学习 05-07 16:12
  • 举报
回复
@ぢ 好好学习 333
1条回复
zhenhua8243910 01-19 12:44
  • 打赏
  • 举报
回复

还在用delphi吗

山东蓝鸟贵薪 2025-12-11
  • 打赏
  • 举报
回复

开发软件都会有“自己的特色功能的”,

建议你专业学习一门编程软件吧

斯文by累 2025-11-27
  • 打赏
  • 举报
回复

你好

ylwdev 2025-11-14
  • 打赏
  • 举报
回复

21212

2301_79386209 2025-10-29
  • 打赏
  • 举报
回复

感谢楼主分享

kinguuuuuu 1 2025-10-15
  • 打赏
  • 举报
回复

不错不错

ExcelentLife 2025-10-07
  • 打赏
  • 举报
回复

不错不错!!1

2301_79386209 2025-09-10
  • 打赏
  • 举报
回复

学习了解了,感谢分享

qq_23055169 2025-08-22
  • 打赏
  • 举报
回复

啊啊啊啊啊

佩爷0107 2025-07-31
  • 打赏
  • 举报
回复 1

可以。Delphi 完全能够制作出功能上类似于 C# .dll 类库的动态链接库(DLL)。 不过,两者的底层机制不同:C# DLL 是托管代码,依赖 .NET 运行时;而 Delphi 生成的是原生机器码 DLL,不依赖 .NET。要在 Delphi DLL 中实现类似 C# 的面向对象功能(类、方法、属性)并供其他语言(如 C#)调用,推荐使用两种健壮的方式:

  1. 扁平化 C 风格接口: 这是兼容性最好的方式。在 DLL 中导出独立的函数(如创建对象的工厂函数、操作对象的方法函数、销毁对象的函数),通过一个“实例句柄”(如指针或整数标识)来代表对象实例进行操作。C# 可通过 P/Invoke 轻松调用这些函数。
  2. COM 对象: Delphi 对 COM 支持极佳。创建实现特定接口的进程内 COM 服务器(DLL),任何支持 COM 的语言(包括 C#)都能像使用标准 Windows 组件一样创建对象并调用其方法。
henrymak123 2025-07-17
  • 打赏
  • 举报
回复

感谢分享,前排学习

加载更多回复(179)

5,943

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧