2016-01-28 28 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,包括标题,然后调用你的函数)。

相关问题