c# - 将 Int32 从托管代码返回到 Delphi

标签 c# delphi

我使用了这篇文章中的信息 Delphi - Accessing data from dynamic array that is populated from an untyped Pointer和其他人,加上 Robert Giesecke 的 Unmanaged Exports写一些很棒的代码 - 谢谢大家。例如,我编写了将复杂字节流从 C# 返回到 Delphi 的方法。然而,我在做最简单的事情时遇到了麻烦 - 从函数调用返回一个整数。

所以,我在 Delphi 中定义了这个原型(prototype):

TReturnIntFunc = function(AnInteger: Integer): Integer; safecall;

在 C# 中:

[DllExport("NegateInt", CallingConvention.StdCall)]
[return: MarshalAs(UnmanagedType.I4)]
static Int32 NegateInt([MarshalAs(UnmanagedType.I4)] Int32 AnInteger)
{
  return AnInteger * -1;
}

与我编写的其他方法一样,我动态加载 C# DLL,发现该函数很好,但是当我从 Delphi 执行它时,它抛出一个异常并显示消息“Safecall 方法中的异常”。

有任何线索吗?我可以并且已经编码回一个 out 或 ref 整数,只是不作为返回值。

最佳答案

Safecall 和 StdCall 不是一回事 - 也尝试在 Delphi 端使用 StdCall。

关于c# - 将 Int32 从托管代码返回到 Delphi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15193740/

相关文章:

c# - 如何在 C# 中从 XML(XML 来自 Web 服务)创建 Crystal Report

c# - 在不访问源代码的情况下覆盖 NUnit 中的 ToString

delphi - TEventLogger 有灯吗?

具有具体实现的 C# 泛型

c# - 代码隐藏中的 XPath/Grabbing 节点值

当我使用 TIdHTTP 进行 HTTPS 调用时,Android 6.0 应用程序崩溃

iphone - 火猴到 iPhone

delphi - 如何找到我的 Delphi 应用程序中的所有单位?

delphi - 如何定位屏幕键盘窗口?

c# - 如何防止将 Windows 窗体发送到后面或如何将其保持在特定的 z 顺序上