【问题标题】:C to C# (accessing C DLL callback function from C#)C 到 C#(从 C# 访问 C DLL 回调函数)
【发布时间】:2014-03-08 15:39:51
【问题描述】:

我想获得一些支持,如何将下面的代码转换为 C#。 我有一个 C 语言的 DLL,它具有某些功能,我可以转换 DLL 调用,但该功能有一个回调声明,我无法将此 C 代码转换为 C#。

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

typedef int(*FunctionPointer)(PTCallBackStructure TCallbackRecord, 
BSTR MessageFromDLL, BSTR &MessageToDLL);

这是 C 代码中的回调函数本身 - 这实际上是从 DLL 调用的:

int test_DLL_Callback(PTCallBackStructure TCallbackRecord, BSTR MessageFromDLL, 
BSTR   &MessageToDLL)
{
 ....
 return 0;
}

这是代码,DLL函数如何传递给DLL: DLL_Callback = test_DLL_Callback;

PDllCommands = (DllCommands*)malloc((sizeof(DllCommands)));
PDllCommands->CallbackFunction = DLL_Callback;
...

结构 PDLLCommands 有一项用于回调函数,这个结构被传递给 DLL。在 DLL 的 C 代码中调用 test_DLL_Callback。

我希望现在我可以澄清我的问题是什么。感谢您的帮助。

【问题讨论】:

  • 这个问题似乎离题了,因为它缺乏足够的信息来诊断问题。更详细地描述您的问题或在问题本身中包含一个最小示例。
  • 如上所述。我想在 C# 中有这段代码,尤其是回调相关的部分。
  • 我不认为关于翻译的问题是题外话,但我投票结束,因为仅仅要求人们为你翻译一段很长的代码并不真正符合 SO。
  • 我已经让我的问题更加具体,但是我认为其他人正在使用更长的代码 sn-ps。谢谢。

标签: c# c++ dll callback


【解决方案1】:

Creating function pointers from delegates.

请注意(那里提到),委托必须在回调之前处于活动状态,但如果您不继续引用它,GC 会收集它。

【讨论】:

  • 谢谢,但是根据我上面复制的代码片段,解决方案如何?
  • 您应该创建一个签名与 C 函数指针兼容的委托。这包括为 C 中使用的类型创建二进制兼容类型。然后为该委托创建委托实例,并从中创建函数指针。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多