【发布时间】:2016-11-09 13:33:39
【问题描述】:
C中有代码(之一):
void Function(char *output, size_t size);
C#中有代码:
[DllImport(@"C:\path\Name.dll",
CallingConvention = CallingConvention.Cdecl,
CharSet = CharSet.Ansi, EntryPoint = "Function")]
static extern void Function([In, Out] StringBuilder output,
[In, MarshalAs(UnmanagedType.SysUInt)] UIntPtr size);
如果我调用此函数应用程序失败并出现此错误:
Unable to load DLL 'C:\path\Name.dll': Access denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
怎么了?我必须做什么?
【问题讨论】:
-
您有两个问题 1) 您必须在调用 DLL 之前分配变量输出。字符 [] 输出 = 新字符 [256](); 2) c# 中的 char 是两个字节,而在 c 中是一个字节。通常你应该使用 byte[] 而不是 char[]。
-
@jdweng 如果我在没有参数的情况下调用另一个方法,应用程序会因此错误而失败。 (对不起我的英语不好)
-
见帖子:stackoverflow.com/questions/38146181/…。使用 byte[] 而不是 char[]。不要使用字符串生成器。
-
虽然可能还有其他问题,但这里解释了“访问被拒绝”错误的原因stackoverflow.com/questions/42381582/…