Как использовать P / Invoke относительно нескольких классов в одном .dll? - PullRequest
1 голос
/ 18 мая 2011

Я довольно новичок в использовании P / Invoke.Таким образом, я могу использовать P / Invoke в настоящее время, используя этот способ, как сказано в Microsoft Tutorial:

[DLLImport("msvcrt.dll")]
public static extern int puts(string c);

, затем просто позвоните

public void UsePuts()
{
  puts("Testing");
}

Однако я сейчас тестирую на фактическомDLL, что я хочу использовать.И я узнал из исходного кода, что кажется, что в этом одном DLL-файле есть несколько классов (например, Class1.cpp и Class2.cpp).

Так, например, я хочуиспользовать функцию из Class1 (Put) и функцию из Class2 (Put), как мне построить мой DLLImport?Как это?

[DLLImport("msvcrt.dll")]
public static extern int Class1.puts(string c);
[DLLImport("msvcrt.dll")]
public static extern int Class2.puts(string c);

Или как?Большое спасибо!

1 Ответ

3 голосов
/ 18 мая 2011

Проверьте это образец

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 ); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...