我在我的 C# 项目中引用了一个 DLL,如下所示:
[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 * 的形式返回对其内部结构的引用,因此如果您要在 C++ 中引用此 DLL,您将执行以下操作来进行计算并获取返回的结构:
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;
};