私はDelphiをかなり新しくしています。私たちはC++またはC#のDLLをDelphiにインポートしようとしました。我々の要件は、COMオブジェクトとしてライブラリをインポートすることです。 DLLには複数のクラスと構造体があるので、メソッドをP/Invokeする必要はありません。 C++/C#とMFC ActiveX(ocxコンポーネント)でDLLを構築しようとしました。 私はDLLを作成するために、これらのリンクを、次のされています:DelphiでCOMオブジェクトとしてC#またはC++ DLLをインポート
- http://www.codeproject.com/Articles/505791/Writing-Simple-COM-ATL-DLL-for-VS
- https://www.simple-talk.com/dotnet/visual-studio/build-and-deploy-a-net-com-assembly/
- https://john.nachtimwald.com/2012/04/08/wrapping-a-c-library-in-comactivex/
と、このリンク(http://wiki.freepascal.org/LazActiveXは)私が作成したTLIBをインポートします。 私が作成するすべてのDLLは、Delphiでオブジェクトを作成する場所を停止することになります。
私はC#で作成したものです:
using System;
using System.Runtime.InteropServices;
using System.IO;
using System.Text;
using System.Threading.Tasks;
namespace CSharpSampleLib
{
[ComVisible(true),
Guid("CDBFD892-7473-4AC4-8B44-D75A828599AD")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface ICSharpCom
{
[DispId(1)]
void Init();
[DispId(2)]
int AddNumbers(int num1, int num2);
[DispId(3)]
String StringConcat(String num1, String num2);
}
[Guid("D51F086B-B593-436D-8900-92CDC1E427CE"),
InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface CSharpCom_Events
{
}
[Guid("4AB74C5C-6F3C-4B15-9E00-5174551B50A2"),
ClassInterface(ClassInterfaceType.None)]
[ProgId("Sample.CSharpCom")]
[ComVisible(true)]
public class CSharpCom : ICSharpCom
{
public CSharpCom() { }
public void Init() { }
public int AddNumbers(int num1, int num2)
{
return num1 + num2;
}
public String StringConcat(String str1, String str2)
{
return str1 + str2;
}
}
}
我々は、インポートタイプライブラリを呼び出すために2つのオプションを試してみました。
program CSharpDemo;
uses comobj, CSharpSampleLib_1_0_TLB;
var
objCsLib1:ICSharpCom;
objCsLib2:OLEVariant;
begin
objCsLib1:=CoCSharpCom.Create; // Method 1
objCsLib2:= CreateOleObject('CSharpSampleLib.CSharpCom'); //Method 2
end.
を私たちは、ライブラリが登録されていることを確認しましたとWOW6432NODEでGUIDを見つけた> CLSID>
これはオブジェクトを作成する正しい方法だと思います。ここで私が何が欠けているのか分かりますか?
エラーメッセージは十分にはっきりしていますか? –
@DavidHeffernanコメントありがとうございます。しかし、私はエラーについて明らかではないと思う、私は登録されているクラスを参照してください。 –
しかし、それはしません。何故なの。 –