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;

};

Antworten auf die Frage(3)

Ihre Antwort auf die Frage