تحويل وظيفة C ++ لدلفي: ما يجب القيام به مع باطلة * المعلمة؟
-
07-07-2019 - |
سؤال
وأنا أكتب DLL في دلفي باستخدام C ++ المثال التالي:
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 ++ والمؤشرات. ماذا يجب أن تستخدم بدلا من شار * (نوع PChar؟) وباطلا *؟
function process_message (const pmessage: PChar; const param: ???): Double; export;
begin
???
end;
exports process_message;
وأي مساعدة مع الجسم وظيفة سيكون في غاية الامتنان أيضا. وأنا أدرك أنه ليست علم الصواريخ، لكنني لن تعلم أساسيات C ++ فقط لتحويل بضعة أسطر، إذا شخص ما نوع ما يكفي لفعل ذلك بالنسبة لي: -)
المحلول
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;
وغير مختبر، ولكن ينبغي أن تساعد في الحصول على انك بدأته.
نصائح أخرى
والوثائق RAD ستوديو على الانترنت يتضمن أنواع الخرائط دلفي لC ++ و> الجدول التي يمكن أن تساعدك على ترجمة قانون ++ C إلى دلفي.
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++)
وPointer
نوع البيانات هو ما يعادل الدقيق C void*
.
لا تنتمي إلى StackOverflow