我以为这是相当简单的,但是仍然试图理解所有这些并遇到一些问题。
我对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,但未传递卡号,然后设置了一条消息,指出卡号未传递。
任何帮助是极大的赞赏。
谢谢!
最佳答案
问题是您正在请求TChar封送处理,但是DLL需要8个字节的字符。将C结构更改为wchar_t。
另外,使用Visual Studio在DLL中设置一个断点,并在输入数据时实际检查数据! Visual Studio可以跨.NET /本机边界进行调试,这非常酷!