Delphi에서 C#로 생성된 DLL 라이브러리를 호출하는 방법

6246 단어 c#runtime
최근에는 상위기와 하위기의 통신을 위한 인터페이스를 써야 하는데, 상위기는 델파이로 개발되었기 때문에 C#로 라이브러리를 만들어서 델파이에 호출해야 한다.
대략적인 단계:
1. 먼저 VS2008에서 새로운 클래스 항목의 이름은TestDelphi이고 인터페이스 파일을 추가하여ITEst라고 명명합니다.cs
소스 코드는 다음과 같습니다.
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;

namespace TestDelphi
{
    public interface ITest
    {
        
        int add(int x, int y);
        
        string getSysName();
        
        byte ArrAdd(byte x, byte y);

        DateTime GetTime(DateTime dt);
    }
}

 
구현 클래스 파일Test를 다시 만듭니다.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;

namespace TestDelphi
{
    [ClassInterface(ClassInterfaceType.None)]
    public class Test:ITest
    {
        public Test()
        { }
        

        public int add(int x, int y)
        {
            return x + y;
        }
        public DateTime GetTime(DateTime  dt)
        {
            return dt.AddDays(2);
        }
        public string getSysName()
        {
            return "I don't care";
        }
        public byte ArrAdd(byte x, byte y)
        {
            byte[] arr = new byte[2];
            arr[0] = x;
            arr[1] = y;
            return arr[0];
        }
    }
}

 
그리고 프로젝트 속성의 프로그램 집합 설정에서 Com을 볼 수 있습니다. 생성에서 'Com 상호작용 등록을 위한 것' 을 선택하십시오.
그런 다음 생성 시간의 생성 후 이벤트 명령행에 를 입력합니다.
"C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\tlbexp""$(TargetPath)"
이 명령은 생성할 때 동시에 하나를 생성하기 위한 것이다.Delphi에 라이브러리를 추가할 때 필요한 TLB 파일입니다.
2,delphi 7을 열고 프로젝트 메뉴에서 import type library -->Add 선택 생성된TestDelphi.TLB
그리고 Palatte Page 선택 Com+
그런 다음 Create Unit 버튼을 클릭하면 Unit TestDelphi 가 생성됩니다.TLB
위 작업이 완료되면 창의 Unit에서TestDelphi 를 참조할 수 있습니다TLB
창에 단추를 추가합니다. 단추의 이벤트에 이렇게 쓰십시오.
procedure TForm1.Button2Click(Sender: TObject);
var obj:ITest; //   C#      
  arr : byte;
  td:TDateTime;
begin
    obj :=CoTest.Create; //    ,    C#     Co
     td := now; //      
     td := obj.GetTime(td); //       
     showmessage(datetimetostr(td)); //           +2 
     arr :=obj.ArrAdd(12,13);  //         
    showmessage(inttostr(obj.add(1,2))); //    1+2   
    showmessage(obj.getSysName()); //     
end;

 
Delphi에서 C#의 라이브러리를 호출하는 방법입니다.
참고: 호출하는 동안 Project xxx raised exception class EOleSysError with message 시스템에서 지정된 파일을 찾을 수 없습니다.
인터넷에서 한참 동안 찾았지만 원인을 찾지 못했습니다. 나중에 생각해 보니 dll 파일을delphi의 프로젝트 디렉터리에 두어야 한다고 생각했습니다. 실행할 때 dll이 필요합니다. 나중에 문제가 성공적으로 해결되었습니다.
오직NET 2.0 시스템의 경우 regasm을 사용하여 등록해야 합니다.
일반 디렉터리는 c:\windows\microsoft.net\v2.아래
regasm /tlb:dllName.tlb dllName.dll
전재 대상:https://www.cnblogs.com/liaoyi/archive/2012/08/10/2631849.html

좋은 웹페이지 즐겨찾기