Delphi에서 C#로 생성된 DLL 라이브러리를 호출하는 방법
대략적인 단계:
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C#Task를 사용하여 비동기식 작업을 수행하는 방법라인이 완성된 후에 이 라인을 다시 시작할 수 없습니다.반대로 조인(Join)만 결합할 수 있습니다 (프로세스가 현재 라인을 막습니다). 임무는 조합할 수 있는 것이다. 연장을 사용하여 그것들을 한데 연결시키는 것이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.