2016-01-28 27 views
0

我有用C#編寫的WinForms。我的項目中有C++動態類庫。我需要從C#應用程序調用本機代碼。 S0,我如何從我的C#應用​​程序調用以下C++函數。從C#應用程序調用本機函數

int printVals(void* thisInstance) 
 
{ 
 
    myClass* thisClass = (myClass*) thisInstance; 
 

 
    printf("Registered X: %d\n", ((int) thisClass->x)); 
 
    printf("Registered Y: %d\n", ((int) thisClass->y)); 
 
    printf("Registered Z: %d\n", ((int) thisClass->z)); 
 
    return 0; 
 
} 
 

 
typedef void (*callback)(void* thisInstance, char* message); 
 

 
typedef struct myClassT 
 
{ 
 
    callback thisCallback; 
 
    char x; 
 
    short y; 
 
    long z; 
 
} myClass;

回答

0

從你的代碼我不能直接看到哪些變量是輸入/輸出到你的C#的形式。但這是我做到的:

  • 在form.h文件中,包含C++項目的頭文件。
  • 形式的私有變量的聲明之間,包括:

    YourClass *yourObject = new YourClass();

  • 您forms.h從那裏你的C++代碼將被稱爲內聲明的函數。

  • 在你forms.cpp文件,實現你的功能,並打電話給你的C++函數以正常的方式:

    yourObject->yourFunction(Argument1, Argument2);

  • 你需要把從C#類型的一些類型轉換到原生類型,例如一個雙轉換從的NumericUpDown到C++雙:

    System::Decimal::ToSingle(this->numericUpDown1->Value);

    爲您的數據類型,搜索MSDN文檔Ø ñ如何轉換它們。

+0

謝謝,無法獲得格式正確... – DrDonut

0

如果只有一個功能,那麼你可以使用的P/Invoke如果你賺了很多電話給你的C++本地庫從C#P/Invoke 調用它,那麼你可能要考慮使用C++/CLI項目(引用DLL,包括標題,然後調用你的函數)。

相關問題