Delphi7程序調用C#寫的DLL解決辦法


 近來,因工作需要,必須解決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准備特定的接口函數

 

http://blog.csdn.net/genispan/article/details/4294487

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM