से फ़ंक्शन परिणाम के रूप में रिकॉर्ड पास करना मुझे अभी कुछ अजीब चीज़ों का सामना करना पड़ रहा है। जब मैं पैरामीटर के रूप में C++ से डेल्फी डीएलएल में एक स्ट्रक्चर पास कर रहा हूं, सबकुछ ठीक काम करता है। हालांकि, जैसे ही मैं परिणाम के रूप में एक रिकॉर्ड प्राप्त करना चाहता हूं, मुझे या तो गलत मान या अपवाद मिलते हैं। मैंने रिकॉर्ड के संरेखण को निष्क्रिय कर दिया ताकि उन्हें गुजरना चाहिए! कोड है!डेल्फी डीएलएल से सी ++
डेल्फी DLL:
TSimpleRecord = packed record
Nr1 : Integer;
Nr2 : Integer;
end;
//...
function TTest() : TSimpleRecord; cdecl;
begin
Result.Nr1 := 1;
Result.Nr2 := 201;
ShowMessage(IntToStr(SizeOf(Result)));
end;
सी ++ कॉल:
#pragma pack(1)
struct TSimpleRecord
{
int Nr1;
int Nr2;
};
//...
typedef TSimpleRecord (__cdecl TestFunc)(void);
TestFunc* Function;
HINSTANCE hInstLibrary = LoadLibrary("Reactions.dll");
if (hInstLibrary)
{
Function = (TestFunc*)GetProcAddress(hInstLibrary, "TTest");
if (Function)
{
TSimpleRecord Result = {0};
Result = Function();
printf("%d - %d - %d", sizeof(Result), Result.Nr1, Result.Nr2);
cin.get();
}
}
मैं पता नहीं क्यों एक पैरामीटर के रूप में काम करता है इस रिकॉर्ड गुजर मिल गया है लेकिन एक समारोह का एक परिणाम के रूप में नहीं !?
किसी को भी मेरी मदद कर सकते `
धन्यवाद
पुनश्च:? जैसा कि मैंने कहा, दोनों सी ++ और डेल्फी बताते हैं कि रिकॉर्ड 8 बाइट्स बड़ी है।
क्या आप वास्तव में डेल्फी फ़ंक्शन में वापसी मान सेट कर रहे हैं? – Angew
परिणाम एनआर 1: = 1; परिणाम। एनआर 2: = 201; उस काम को – Henry
करना चाहिए क्षमा करें, आखिरकार जब मैंने डेल्फी के साथ बातचीत की, तो 'परिणाम' अभी भी फ़ंक्शन पहचानकर्ता, आईआईआरआर का उपयोग करता था। – Angew