【发布时间】:2016-08-12 12:40:50
【问题描述】:
我正在制作使用 64 位 c DLL 的 64 位 Delphi 导出程序。我得到的问题是 c DLL 无法识别 Delphi 枚举并为错误的数据类型返回错误。我已经尝试对 Delphi 编译器使用 {$packenums} 或 {$Z} 指令,但仍然返回相同的错误。我正在使用 xe8 德尔福。枚举看起来像:
type
DDCDataType=(
DDC_notype = 0,
DDC_UInt8 = 5, // unsigned char
DDC_Int16 = 2, // short
DDC_Int32 = 3, // int
DDC_Float = 9, // float -> single
DDC_Double = 10, // double
DDC_String = 23 // string
);
在c头看起来像
typedef enum {
DDC_UInt8 = 5, // unsigned char
DDC_Int16 = 2, // short
DDC_Int32 = 3, // int
DDC_Float = 9, // float
DDC_Double = 10, // double
DDC_String = 23, // string
DDC_Timestamp = 30, // timestamp (Year/Month/Day/Hour/Minute/Second/Millisecond components)
} DDCDataType;
我希望这是有道理的 :) 谢谢!
【问题讨论】:
-
这里没有多大意义。你为什么注释掉这些值?当然,它们很重要。我们也不能看到 C 代码吗?否则我们将如何知道目标是什么。撇开你的问题不谈,这是一个学习我简单的 SO 互操作格言的机会:互操作问题总是需要呈现互操作边界的两侧。你只展示了一面。
-
我已经尝试过评论和否,并且工作方式相同,所以我离开了他们。
-
如果您提供了错误的值,它怎么可能工作。反复试验。这对你有用吗?
-
适用于 32 位版本的程序
-
不太可能。指定错误的值永远不会起作用。