Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C到C(从C访问C DLL回调函数)_C#_C++_Dll_Callback - Fatal编程技术网

C# C到C(从C访问C DLL回调函数)

C# C到C(从C访问C DLL回调函数),c#,c++,dll,callback,C#,C++,Dll,Callback,我想获得一些关于如何将下面的代码转换为C的支持。 我在C中有一个DLL,它有某些函数,我可以转换DLL调用,但该函数有一个回调声明,我无法将此C代码转换为C 这是C中的回调声明,如下所示: typedef int(*FunctionPointer)(PTCallBackStructure TCallbackRecord, BSTR MessageFromDLL, BSTR &MessageToDLL); int test_DLL_Callback(PTCallBackStructur

我想获得一些关于如何将下面的代码转换为C的支持。 我在C中有一个DLL,它有某些函数,我可以转换DLL调用,但该函数有一个回调声明,我无法将此C代码转换为C

这是C中的回调声明,如下所示:

typedef int(*FunctionPointer)(PTCallBackStructure TCallbackRecord, 
BSTR MessageFromDLL, BSTR &MessageToDLL);
int test_DLL_Callback(PTCallBackStructure TCallbackRecord, BSTR MessageFromDLL, 
BSTR   &MessageToDLL)
{
 ....
 return 0;
}
这是C代码中的回调函数itlself-实际上是从DLL调用的:

typedef int(*FunctionPointer)(PTCallBackStructure TCallbackRecord, 
BSTR MessageFromDLL, BSTR &MessageToDLL);
int test_DLL_Callback(PTCallBackStructure TCallbackRecord, BSTR MessageFromDLL, 
BSTR   &MessageToDLL)
{
 ....
 return 0;
}
这是DLL函数如何传递到DLL的代码: DLL\U回调=测试DLL\U回调

PDllCommands = (DllCommands*)malloc((sizeof(DllCommands)));
PDllCommands->CallbackFunction = DLL_Callback;
...
结构PDLLCommands有一项用于回调函数,此结构传递给DLL。在正在进行的测试中,从DLL调用C代码中的回调

我希望现在我能澄清我的问题是什么。谢谢你的帮助。


请注意(这里提到过),委托在回调之前必须是活动的,但是如果您不保留对它的引用,GC将收集它

这个问题似乎离题了,因为它缺乏足够的信息来诊断问题。更详细地描述你的问题,或者在问题本身中加入一个最小的例子。如上所述。我想用C#编写这段代码,特别是回调相关的部分。我不认为有关翻译的问题离题,但我投票决定结束,因为仅仅要求人们为你翻译一段很长的代码并不真正符合这一点。我已经让我的问题更具体了,然而,我认为其他人正在编写更长的代码片段。谢谢。谢谢,但是基于我上面复制的代码snipet,解决方案会是什么样子呢?您应该创建一个签名与C函数指针兼容的委托。这包括为C中使用的类型创建二进制兼容类型,然后为该委托创建委托实例,并从中创建函数指针。