Zeiger in C # zum Abrufen der Referenz von der DllImport-Funktion
Ich verweise auf eine DLL in meinem C # -Projekt wie folgt:
[DllImport("FeeCalculation.dll", CallingConvention = CallingConvention.StdCall,
CharSet = CharSet.Ansi)]
public static extern void FeeCalculation(string cin, string cout, string flimit,
string frate, string fwindow, string fincrement, string fbird,
string fparameter, string fvalidation, string fcoupon);
Die Funktion FeeCalculation wird in der DLL wie folgt exportiert:
extern "C" __declspec(dllexport) void __stdcall FeeCalculation(char *cin,
char *cout, char *flimit, char *frate,
char *fwindow, char *fincrement, char *fbird,
char *fparameter, char *fvalidation, char *fcoupon);
Die DLL-Funktion gibt einen Verweis auf ihre internen Strukturen in Form von char * zurück. Wenn Sie also auf diese DLL in C ++ verweisen, würden Sie Folgendes tun, um die Berechnung durchzuführen und die zurückgegebenen Strukturen abzurufen:
FeeCalculation(buff, (char *)&fans, (char *)fl, (char *)ft, (char *)fw, (char *)fi, (char *)fe, (char *)&fm, (char *)val, (char *)cpn);
Wie rufe ich nun die Werte ab, die mit C # als Referenz zurückgegeben werden? Das heißt, wie mache ich dasselbe in C #, um die zurückgegebenen Strukturen abzurufen, um meine zurückgegebene Berechnung abzurufen? Ich weiß, dass ich eine unsichere Methode erstellen muss, aber ich bin nicht sicher, wie ich mit den Speicheradressen in C # umgehen soll, wie Sie es in C ++ tun würden.
Bearbeiten: Unterhalb der Zustände, um IntPtr zu verwenden, aber wie platzieren Sie diese in eine identische Struktur, damit auf die Felder der Struktur verwiesen werden kann?
Bearbeiten: Hier ist die zurückgegebene Struktur, die mich interessiert (cout):
struct feeAnswer {
unsigned int fee;
unsigned int tax1;
unsigned int tax2;
unsigned int tax3;
unsigned int tax4;
unsigned int surcharge1;
unsigned int surcharge2;
unsigned int validationFee;
unsigned int couponFee1;
unsigned int couponFee2;
unsigned int couponFee3;
unsigned int couponFee4;
unsigned short int dstay; //Day Stay
unsigned short int mstay; //Minute Stay
};
Hier ist das (cin), das ich zusammen mit anderen Strukturen weitergeben würde (sie sind im Moment null Byte, ich möchte, dass dies zuerst funktioniert, dann werde ich den Rest implementieren):
struct feeRequest {
unsigned char day;
unsigned char month;
unsigned int year; //2000 ~ 2099
unsigned char hour;
unsigned char minute;
unsigned char rate;
unsigned char validation;
unsigned char coupon1;
unsigned char coupon2;
unsigned char coupon3;
unsigned char coupon4;
};