C#访问本机C DLL
C# Access To Native C++ DLL
我正在尝试创建一个访问本机C DLL的程序。以下是示例代码。
C 代码
GetRmaPin (const char *rma_password, const char *serial, unsigned char *rma_pin);
c#代码
class Program
{
static void Main ( string [ ] args )
{
string[] password = { "74f3d3a287cee548c1842c07090d6a274dd0ddbd04bfd1e4694861a369bc7304" };
string[] serial = { "184393900006" };
//StringBuilder rma_pin = new StringBuilder(2048);
byte[] rma_pin = new byte[2048];
int rc = GetRmaPin(password, serial, ref rma_pin);
Console.WriteLine ( "Result: " + rc.ToString ( ) );
Console.WriteLine ( "Payload: " + rma_pin.ToString ( ) );
Console.Read ( );
}
[DllImport ( "Security.dll" , EntryPoint = "GetRmaPin" , CallingConvention = CallingConvention.Cdecl)]
public static extern int GetRmaPin (
[In][MarshalAs ( UnmanagedType.LPArray , ArraySubType = UnmanagedType.LPStr )] string [ ] password ,
[In][MarshalAs ( UnmanagedType.LPArray , ArraySubType = UnmanagedType.LPStr )] string [ ] serial ,
ref byte[] rmap_in );
}
错误消息:托管调试助理" fatalexecution engineError"消息=托管调试助手" fatalexecution engineError":'运行时遇到了致命的错误。该错误的地址位于线程0x97a4上的0x732DC93D。错误代码为0xC0000005。此错误可能是CLR中的错误,也可能是用户代码的不安全或不可验证的部分中的错误。此错误的常见来源包括com-Interop或pinvoke的用户编制错误,这可能会损坏堆栈。'
我找到了一种实验后从第三参数获取值的方法。这是更新的代码。感谢@hanspassant的提示,以删除" REF"。希望这对将来的人有帮助。
class Program
{
static void Main ( string [ ] args )
{
string[] password = { "74f3d3a287cee548c1842c07090d6a274dd0ddbd04bfd1e4694861a369bc7304" };
string[] serial = { "184393900006" };
byte[] rma_pin = new byte[32];
int rc = GetRmaPin(password, serial, rma_pin);
Console.WriteLine ( "Result: " + rc.ToString ( ) );
Console.WriteLine ( "Payload: " + BitConverter.ToString ( rma_pin ).Replace ( "-" , "" ) );
Console.Read ( );
}
[DllImport ( "SecurityProduction.dll" , EntryPoint = "GetRmaPin" , CallingConvention = CallingConvention.Cdecl)]
public static extern int GetRmaPin (
[In][MarshalAs ( UnmanagedType.LPArray , ArraySubType = UnmanagedType.LPStr )] string [ ] password ,
[In][MarshalAs ( UnmanagedType.LPArray , ArraySubType = UnmanagedType.LPStr )] string [ ] serial ,
byte[] rmap_in );
}
相关文章:
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 如何告诉本机节点模块所需的dll存储在哪里?
- 如何在C++非托管/本机 DLL 中从注册免费 COM C# 托管 DLL 创建 COM 对象
- C++/CLI 混合托管/本机 DLL 不起作用
- 用于LabView中使用的本机c++的c++/cli dll包装器
- 可以从本机代码(如C++/Delphi)中使用.netCore DLL
- 如何在 windowsservercore Docker 映像上安装执行本机C++ DLL/EXE 所需的所有依赖二进制
- 努力使用 C# 从本机 DLL 调用该方法
- 本机 dll 中的动态内存分配
- 本机 dll 从 c# 中踢出,没有错误消息
- 防止本机C++DLL崩溃C#应用
- Unity 如何使用本机 dll 或转换为托管
- 将本机非托管的C DLL加载到托管的C#应用中,导致DLL输出垃圾
- 附加到 C++/CLI dll 的性能探查器无法访问本机C++代码
- clr 如何使用本机 c++ dll 的引用'&'参数调用函数?
- Excel 2016 VSTO 加载项与本机代码 DLL
- 当我将 c++ DLL(我从 c# 调用)重新生成为 /CLR(最初是本机)时,性能下降了一半
- C#访问本机C DLL
- 从C#调用Advapi32.dll本机EventWrite函数
- 如何保留我的unity3d程序(c#v3.5),即使c ++ dll /本机插件中有exit(1)