从 C# 应用调用本机函数
Calling native function from C# app
我有用C#编写的WinForms。我的项目中C++动态类库。我需要从 C# 应用调用本机代码。S0,如何从我的 C# 应用程序调用下面的 C++ 函数。
int printVals(void* thisInstance)
{
myClass* thisClass = (myClass*) thisInstance;
printf("Registered X: %dn", ((int) thisClass->x));
printf("Registered Y: %dn", ((int) thisClass->y));
printf("Registered Z: %dn", ((int) thisClass->z));
return 0;
}
typedef void (*callback)(void* thisInstance, char* message);
typedef struct myClassT
{
callback thisCallback;
char x;
short y;
long z;
} myClass;
如果它只用于一个函数,则可以使用 P/Invoke 从 C# P/Invoke 调用它如果对C++本机库进行了大量调用,则可能必须考虑使用 C++/CLI 项目(引用 dll,包含标头,然后调用函数)。
从您的代码中,我无法直接看到哪些变量是 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 文档。
相关文章:
- 在这种情况下,java对象是否可以调用本机函数
- 对于第二个本机函数,显示不舒适的LinkError:未针对.stringfromjni2()找到实现
- 在使用该名称创建变量后调用本机 C 函数
- clr 如何使用本机 c++ dll 的引用'&'参数调用函数?
- 如何从 JNI 传递 std::list 参数来调用本机 C++ 函数
- NDK - 包含一个预构建的库,并在 Android 项目中调用本机函数
- 在本机C 函数内是否需要GCRoot
- 从 C# 调用本机C++函数
- Android本机C 函数呼叫导致应用程序崩溃
- 如何从VM调用本机函数
- 通过JNI执行OpenCV本机函数的问题
- 如何在类中引用本机函数
- 从托管代码调用本机函数
- JNA 本机函数调用和具有双**指针/数组内存分配的结构
- 从 C# 应用调用本机函数
- 从Android Java调用本机函数 - JNI的替代品
- 使用mysql本机函数进行字节顺序转换
- 如何从本机函数返回QAndroidJniObject
- 从没有/clr的文件中调用本机函数
- Chromium Embedded Framework中本机函数的后台处理