近来,因工作需要,必须解决Delphi7写的主程序调用C#写的dll的问题。在网上一番搜索,又经过种种试验,最终证明有以下两种方法可行:
    编写C#dll的方法都一样,首先在vs2005中创建一个“类库”项目TestDll,
using System.Runtime.InteropServices;
namespace TestDll
{
     public   interface  I TestClass
    {
       void YourProcedure(stirng param1);
    }
   [ClassInterface(ClassInterfaceType.None)]
    public   class TestClass:I TestClass
    {
       public void YourProcedure (stirng param1);
       {    //自己的代码    }
    }  
}
完成之后,设置项目的属性“Make assembly COM-Visible”为选中状态。编译之后得到 TestClass.dll,把此dll放到Delphi主程序目录下。打开vs2005自带的工具“Visual Studio 2005命令提示”,输入
Regasm  路径/TestClass.dll 向系统注册此dll。

Delphi程序调用此Dll方式有两种:
一、打开vs2005自带的工具“Visual Studio 2005命令提示”,输入 TlbExp  路径/TestClass.dll 得到一个TestClass.tlb 文件。打开Delphi,选择“Project”--“import type library”找到刚才的TestClass.tlb,点击 CreateUnit,向delphi中引入一个com接口。
delphi 调用代码如下:
  var aClass: TestClass;
  begin
    aClass : =  CoTestClass.Create;
    aClass. YourProcedure ('参数');
  end;
二、不需生成tlb文件,仿照调用Excel的方式。代码如下:
 var aClass: Variant;
begin
  aClass:= CreateOleObject('TestDll.TestClass');
  aClass.YourProcedure ('参数');
end;

以上两种方法都可以调用成功,其中调用regasm.exe向系统注册dll是必需的。第一种方法需要生成tlb文件,并引入delphi中,操作繁琐,但可以看到接口的定义。第二种方法操作简单,但看不到接口的定义。

==============================================================
本人用第二种方法已正常实现功能,但DLL中一些自动创建的方法无法在外部直接调用,需要DLL准备特定的接口函数

转载于:https://www.cnblogs.com/wxy8/archive/2011/07/12/2104292.html

【转】Delphi7程序调用C#写的DLL解决办法相关推荐

  1. 易语言如何调用c dll文件,易语言调用C++写的DLL

    直接调用会弹出堆栈错误的信息,原因是VS默认是__cdcel方式,而易语言是__stdcall,所以调用约定不一致导致堆栈错误. 解决方案很简单,易语言声明DLL函数时"在库中对应命令名&q ...

  2. C# 调用C++写的dll的实现方法

    文章目录 **C# 调用C++写的dll的实现方法** 一. dll的编写 2.C#调用 C# 调用C++写的dll的实现方法 C#调用C++的非托管类的dll其实很简单基本就是固定的调用格式. 一. ...

  3. VC调用C#写的DLL

    From: http://hi.baidu.com/ocnc/blog/item/2c7fc45c1d1f1051fbf2c0ea.html VC中调用C#写的DLL时,对C#这边的DLL有要求,即要 ...

  4. c#调用C++写的dll导出类,如何实现

    网上看了一些都是调用c++写函数能不能实现c#使用c++写的类各位高手请赐教 解决方案 » 类的有一个成员函数,是返回这个类的指针,那么在C#里面就是一个INTPTR,它是什么你不用管.然后C++文件 ...

  5. QT调用C#写的Dll

    QT调用C#写的Dll 参见: https://blog.csdn.net/weixin_42420155/article/details/81060945 C#写的dll是没有dllMain入口函数 ...

  6. c++调用c#写的DLL

    c++调用c#写的DLL: 此文章演示了建立c#的dll: c++建立工程,引入dll: 不能解决的问题: 指定dll的路径,在代码里面直接写 #using "xxx.dll" 必 ...

  7. QT调用C++写的Dll

    C#写的dll是没有dllMain入口函数的,是一种中间语言,需要.Net运行时进行做本地化工作,因此如果要调用C#写的dll,需要依赖.Net运行时,然而Qt中还无法直接调用.Net运行时,最好的方 ...

  8. 【PhotoScan精品教程】photoscan无法启动此程序,因为计算机中丢失cholmod.dll解决办法

    安装完航测软件photoscan,打开时提示:无法启动此程序,因为计算机中丢失 cholmod.dll解决办法. 错误提示: 解决办法: 并不是缺少该动态链接库文件,而是补丁文件拷贝错了.

  9. 计算机中丢失openal32.dll无法启动游戏,缺少openal32period;dll 解决办法 | 手游网游页游攻略大全...

    发布时间:2015-10-09 文明太空玩家将扮演成为探索某星球的第一人,在这段奇妙的旅程中我们能看见很多没有见过的美景和各种神迹,各位玩家是否已经忍不住要去探索了呢. 今天我们一起来看一下文明太空缺 ...

  10. SQL Server安装问题程序被挂起的错误解决办法

    SQL Server安装问题程序被挂起的错误解决办法 SQL Server安装问题程序被挂起的错误解决办法 安装SQL Server2000的时候,安装程序提示我安装程序被挂起,让我重新启动电脑,但我 ...

最新文章

  1. Linux 准确查找结构体定义位置
  2. 2.1:CGPROGRAM
  3. 机器大神 Michael Jordan 教授主题演讲:机器学习——创新视角,直面挑战》
  4. 关于重构之Switch的处理【一】如果是有序的话,如何处理
  5. 取两个日期相差几年_干货~44个最常用的日期和时间类函数组合
  6. go 调用其他文件函数_【C# 调用 Go 语言】0x1 Hello Golang
  7. mysql 查看有没有drop权限的命令
  8. 微软发文庆祝 .NET 诞生 20 周年纪念日!
  9. linux-basic(13)学习shell script
  10. 清爽登录界面html,基于css3实现扁平简洁清爽的登录注册页面代码
  11. 牛B装备 XSS 漏洞利用工具[使用教程]
  12. 二叉树的建立 java_Java中二叉树的建立和各种遍历实例代码
  13. aac蓝牙编解码协议_蓝牙协议总结
  14. 华为服务器voip处理性能,voip云服务器注册状态
  15. Pascal 转 C++ 教程1
  16. catia里画铰链_基于CATIA的汽车车门铰链设计
  17. CSS3选择器(全部)
  18. LeetCode刷题(158)~从尾到头打印链表【递归|辅助栈】
  19. 【工具】解决Windows7影音制作的错误:C946001E
  20. 计算机word窗口的组成,推计算机等级考试题库:一级MS Office第三章“Word窗口及其组成”(一)...

热门文章

  1. 110 同步、异步、阻塞、非阻塞
  2. AGC016E Poor Turkeys
  3. Flask 的路由系统 FBV 与 CBV
  4. JAVA中字符串函数subString的用法小结
  5. 「本地搭建」worpress博客系统
  6. 中国农历2013,2014 (zz.IS2120@BG57IV3)
  7. Session持久化
  8. Excel关于超级链接的宏命令
  9. Listen 0.0.0.0:80 Listen [::0]:80
  10. 提问的智慧 - How To Ask Questions The Smart Way