Я ссылаюсь на DLL в моем проекте C # следующим образом:
[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);
Функция FeeCalculation экспортируется в DLL следующим образом:
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);
Функция DLL возвращает ссылкук его внутренним структурам в форме char *, поэтому, если бы вы ссылались на эту DLL в C ++, вы бы сделали следующее для вычисления и получения возвращенных структур:
FeeCalculation(buff, (char *)&fans, (char *)fl, (char *)ft, (char *)fw, (char *)fi, (char *)fe, (char *)&fm, (char *)val, (char *)cpn);
Теперь, как мнеполучить те значения, которые возвращаются по ссылке, используя C #?Имеется в виду, как мне сделать то же самое в C #, чтобы получить возвращенные структуры, чтобы получить мои возвращенные вычисления?Я знаю, что мне нужно создать небезопасный метод, но мне непонятно, как обращаться с адресами памяти в C #, как вы это делаете в C ++.
Редактировать: Ниже приведены состояния для использования IntPtr, но как выпоместить в идентичную структуру, чтобы можно было ссылаться на поля структуры?
Редактировать: Вот интересующая меня возвращаемая структура (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
};
Вот(cin), который я передал бы вместе с другими структурами (в данный момент они равны нулю, я хочу, чтобы это сначала заработало, а потом я реализую остальные):
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;
};