【发布时间】:2012-10-19 13:02:57
【问题描述】:
我在调用 C# 中的 C DLL 时遇到问题
C 函数是(我没有 c 标头或对此的良好规范:()
int knr12_read ( char *kn12, char *ik9, char *wok, char *wlc,
char *plz, char *ort, char *woz );
kn12 是一个参考参数
这是我在 C# 中尝试过的
[return: MarshalAs(UnmanagedType.U4)]
[DllImport("Knr12.dll", CallingConvention = CallingConvention.StdCall, EntryPoint = "knr12_read", CharSet = CharSet.Ansi)]
unsafe public static extern int knr12_read(out IntPtr buffer, string ik9, string wok, string wlc, string plz, string ort, string woz);
int knr = knr12_read(out pBuffer, knrTemp, "11111", "", "98529", "Suhl", "1");
string data = Marshal.PtrToStringAnsi(pBuffer);
返回的int总是对的,应该是怎样的,但是我的ref参数pBuffer有问题...
其他变量的 sting 类型也在起作用...
当我使用ref 时,我总是得到一个AccessViolation error knr12_read()。如果我使用out 我得到一个指针,但字符串总是空的,这不可能。我什至试过String 与 ref 对应于 char*,但我在 knr12_read() 上得到一个 AccessViolation error。
请指导。
【问题讨论】:
标签: c# c dll marshalling unmanaged