如何在一个.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);

还是怎么做?非常感谢!

如何在一个.dll中对多个类使用 P/Invoke

检查此示例

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 ); 
}