私はいくつかのオンラインの例に従うことによって、C++ DLL関数をC#にインポートしました。関数はC#クラスの一部として宣言する必要があります。しかし、他のC#クラスでこれらの関数を使用したい場合、宣言をどのように共有できますか?ファイル間でC#DllImport関数をどのように共有できますか?
最高の解決策は、C++ DLL関数を汎用クラスにインポートし、アプリケーション全体でこれを使用することです。
ありがとうございます。
編集:私は以下の提案を試みましたが、構造体を使用しようとすると、 "ImportSomeStuffが保護レベルのためにアクセスできない"というエラーが表示されます。すべてが公開されているようですので、他に何を試すことができますか?
class ImportSomeStuff
{
[StructLayout(LayoutKind.Sequential)]
public struct MyStruct
{
public uint nData;
}
public delegate void MyCallback(ref MyStruct myStruct);
[DllImport("My.dll", CallingConvention = CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.I1)]
public static extern bool AddCallback(MyCallback callback);
[DllImport("My.dll", CallingConvention = CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.I1)]
public static extern bool RemoveCallback(MyCallback callback);
}
(異なるファイル)
class DoSomeStuff
{
public List<ImportSomeStuff.MyStruct> listStuff = new List<ImportSomeStuff.MyStruct>();
}
ありがとうございます。私の関数では、C#で宣言した構造体も使用していますが、私は現在、 "[クラス]がその保護レベルのためにアクセスできない"というエラーを受けています。助言がありますか? – parsley72
@parsley次にstructsを公開します – CodesInChaos
これは上記のコード例を参照してください。 – parsley72