转换 C++ Delphi 函数:如何处理 void* 参数?

发布于 2024-08-05 05:23:09 字数 684 浏览 5 评论 0原文

我正在使用下面的 C++ 示例在 Delphi 中编写 DLL:

USERDLL_API double process_message (const char* pmessage, const void* param) 
{
    if (pmessage==NULL) { return 0; }
    if (param==NULL) { return 0; }

    if (strcmp(pmessage,"state")==0) 
    { 
        current_state *state = (current_state*) param;
        return process_state( (current_state*)param ); 
    }
}

不幸的是,我对 C++ 和指针几乎一无所知。我应该使用什么来代替 char* (PChar?) 和 void*?

function process_message (const pmessage: PChar; const param: ???): Double; export;
begin
    ???
end;

exports process_message;

任何有关函数主体的帮助也将受到高度赞赏。我意识到这不是火箭科学,但如果有人愿意为我做这件事,我不会仅仅为了转换几行而学习 C++ 基础知识:-)

I'm writing a DLL in Delphi using the below C++ example:

USERDLL_API double process_message (const char* pmessage, const void* param) 
{
    if (pmessage==NULL) { return 0; }
    if (param==NULL) { return 0; }

    if (strcmp(pmessage,"state")==0) 
    { 
        current_state *state = (current_state*) param;
        return process_state( (current_state*)param ); 
    }
}

Unfortunately, I know next to nothing about C++ and pointers. What should I use instead of char* (PChar?) and void*?

function process_message (const pmessage: PChar; const param: ???): Double; export;
begin
    ???
end;

exports process_message;

Any help with the body of the function will be highly appreciated, too. I realize it's not rocket science, but I wouldn't learn the basics of C++ just to convert a couple of lines, if someone's kind enough to do that for me :-)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

堇色安年 2024-08-12 05:23:09

RAD Studio 在线文档包含一个 Delphi 到 C++ 类型映射 表它可以帮助您将 C++ 代码翻译为 Delphi。

Delphi type         Platform    Corresponding C++ type

Boolean (Delphi)                bool (C++)
ShortInt (Delphi)               ShortInt, signed char (C++)
SmallInt (Delphi)               short (C++)
Integer (Delphi)                int (C++)
Byte (Delphi)                   Byte (C++)
Word (Delphi)                   Word (C++)
Cardinal (Delphi)               unsigned (C++)
Int64 (Delphi)                  __int64 (C++)
UInt64 (Delphi)                 unsigned __int64 (C++)
NativeInt (Delphi)  32-bit Win   int (C++)
                    64-bit Win  __int64 (C++)
                    64-bit iOS  long (C++)
NativeUInt (Delphi) 32-bit      unsigned (C++)
                    64-bit Win  unsigned __int64 (C++)
                    64-bit iOS  unsigned long (C++)
Single (Delphi)                 float (C++)
Double (Delphi)                 double (C++)
Extended (Delphi)               Extended (C++)
Currency (Delphi)               Currency, CurrencyBase (C++)
Comp (Delphi)                   Comp, CompBase (C++)
Real (Delphi)                   double (C++)
ShortString (Delphi)            ShortString, ShortStringBase (C++)
OpenString (Delphi)             OpenString (C++)
File (Delphi)                   file (C++)
Text (Delphi)                   TextFile (C++)
ByteBool (Delphi)               ByteBool (C++)
WordBool (Delphi)               WordBool (C++)
LongBool (Delphi)               BOOL (C++)
Real48 (Delphi)                 not supported in C++
Pointer (Delphi)                void* (C++)
PWideChar (Delphi)              WideChar* (C++)
PAnsiChar (Delphi)              char* (C++)
Variant (Delphi)                defined in sysvari.h (C++)
OleVariant (Delphi)             defined in sysvari.h (C++)
LongInt (Delphi)                int (C++)
                     64-bit iOS long (C++)
LongWord (Delphi)               unsigned (C++)
                     64-bit iOS unsigned long (C++)
FixedInt (Delphi)               int (C++)
FixedUInt (Delphi)              unsigned int (C++)
TextFile (Delphi)               TextFile (C++)

The RAD Studio online documentation includes a Delphi to C++ types mapping table which can help you to translate the C++ Code to Delphi.

Delphi type         Platform    Corresponding C++ type

Boolean (Delphi)                bool (C++)
ShortInt (Delphi)               ShortInt, signed char (C++)
SmallInt (Delphi)               short (C++)
Integer (Delphi)                int (C++)
Byte (Delphi)                   Byte (C++)
Word (Delphi)                   Word (C++)
Cardinal (Delphi)               unsigned (C++)
Int64 (Delphi)                  __int64 (C++)
UInt64 (Delphi)                 unsigned __int64 (C++)
NativeInt (Delphi)  32-bit Win   int (C++)
                    64-bit Win  __int64 (C++)
                    64-bit iOS  long (C++)
NativeUInt (Delphi) 32-bit      unsigned (C++)
                    64-bit Win  unsigned __int64 (C++)
                    64-bit iOS  unsigned long (C++)
Single (Delphi)                 float (C++)
Double (Delphi)                 double (C++)
Extended (Delphi)               Extended (C++)
Currency (Delphi)               Currency, CurrencyBase (C++)
Comp (Delphi)                   Comp, CompBase (C++)
Real (Delphi)                   double (C++)
ShortString (Delphi)            ShortString, ShortStringBase (C++)
OpenString (Delphi)             OpenString (C++)
File (Delphi)                   file (C++)
Text (Delphi)                   TextFile (C++)
ByteBool (Delphi)               ByteBool (C++)
WordBool (Delphi)               WordBool (C++)
LongBool (Delphi)               BOOL (C++)
Real48 (Delphi)                 not supported in C++
Pointer (Delphi)                void* (C++)
PWideChar (Delphi)              WideChar* (C++)
PAnsiChar (Delphi)              char* (C++)
Variant (Delphi)                defined in sysvari.h (C++)
OleVariant (Delphi)             defined in sysvari.h (C++)
LongInt (Delphi)                int (C++)
                     64-bit iOS long (C++)
LongWord (Delphi)               unsigned (C++)
                     64-bit iOS unsigned long (C++)
FixedInt (Delphi)               int (C++)
FixedUInt (Delphi)              unsigned int (C++)
TextFile (Delphi)               TextFile (C++)
池予 2024-08-12 05:23:09
function process_message (const pmessage: PChar; const param: Pointer): Double; export; stdcall;
begin
    If (pmessage = nil) Or (param = nil) Then
        Result := 0;
    Else If StrComp(pmessage, 'state') = 0 Then
       Result := process_state(current_state^(param));

    // missing a return statement for cases where pmessage is not 'state' here!
end;

exports process_message;

未经测试,但应该有助于您入门。

function process_message (const pmessage: PChar; const param: Pointer): Double; export; stdcall;
begin
    If (pmessage = nil) Or (param = nil) Then
        Result := 0;
    Else If StrComp(pmessage, 'state') = 0 Then
       Result := process_state(current_state^(param));

    // missing a return statement for cases where pmessage is not 'state' here!
end;

exports process_message;

Untested, but should help to get you started.

夏の忆 2024-08-12 05:23:09

Pointer 数据类型与 C void* 完全相同。

Pointer datatype is an exact equivalent of C void*.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文