我认为这是相当直截了当的,但仍然试图理解所有这些并遇到一些问题。
我对 C 函数 b/c 了解不多,我得到的信息有限。
这是C中的函数调用:
int GetCard(CardInfo card);
这是请求结构:
typedef struct _tCardInfo
{
char CardNumber[80];
char isExist;
} TCardInfo, *pTCardInfo;
我想通过卡号看看它是否存在。
所以在 C# 中我做了以下事情:
public struct CardInfo
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
public string cardNumber;
public byte isExist;
}
[DllImport("card.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)]
public static extern int GetCardInfo(ref CardInfo cardInfo);
然后在c#方法中:
CardInfo cardInfo = new CardInfo();
cardInfo.cardNumber = "1234567890";
int success = GetCardInfo (ref cardInfo);
我正在调用的 DLL 的好处是它会生成一个日志文件。当我执行调用时,日志告诉我我正在访问 DLL,但它没有传递卡号,然后设置一条消息说卡号没有传递。
任何帮助是极大的赞赏。谢谢!