如何在一个.dll中对多个类使用 P/Invoke
本文关键字:Invoke dll 一个 | 更新日期: 2023-09-27 17:56:40
我对使用P/Invoke相当陌生。所以我能够使用P/Invoke当前使用这种方式,如Microsoft教程中所述:
[DLLImport("msvcrt.dll")]
public static extern int puts(string c);
然后只需致电
public void UsePuts()
{
puts("Testing");
}
但是,我现在正在测试要使用的实际.dll。通过查看源代码,我发现似乎在那个.dll文件中,有多个类(如 Class1.cpp 和 Class2.cpp)。
例如,我想使用 Class1 中的函数(puts)和 Class2(puts)中的函数,我应该如何构建我的 DLLImport?喜欢这个?
[DLLImport("msvcrt.dll")]
public static extern int Class1.puts(string c);
[DLLImport("msvcrt.dll")]
public static extern int Class2.puts(string c);
还是怎么做?非常感谢!
检查此示例
public class LibWrap
{
/*
class PINVOKELIB_API CTestClass
{
public:
CTestClass( void );
int DoSomething( int i );
private:
int m_member;
};
*/
[ DllImport( "..''LIB''PinvokeLib.dll",
EntryPoint="?DoSomething@CTestClass@@QAEHH@Z",
CallingConvention=CallingConvention.ThisCall )]
public static extern int TestThisCalling( IntPtr ths, int i );
// CTestClass* CreateTestClass();
[DllImport( "..''LIB''PinvokeLib.dll" )]
public static extern IntPtr CreateTestClass();
// void DeleteTestClass( CTestClass* instance )
[ DllImport( "..''LIB''PinvokeLib.dll" )]
public static extern void DeleteTestClass( IntPtr instance );
}