如何从 C# 中的 dll 导入访问/编组 char *变量

发布于 2024-08-22 13:01:20 字数 228 浏览 5 评论 0原文


我需要访问 win32 dll 的功能,因为我在 C# 代码中使用 [dllimport]。


我需要使用 [dllimport] 为以下 C++ 方法创建什么确切的方法签名

void GetGeneratedKey(char *code, int len, char *key)

请帮忙。

谢谢
nRk

I need to access functionality from win32 dll , for that I am using [dllimport] in C# code.

what exact method signature i need to create with [dllimport] for the following c++ methods

void GetGeneratedKey(char *code, int len, char *key)

pls help in this.

Thanks

nRk

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

若能看破又如何 2024-08-29 13:01:20

这很大程度上取决于原生 C 函数中变量 keycode 发生的情况。根据签名,我猜测正在读取 code 并写入 key 。如果是这种情况,请尝试以下签名

[DllImport("SomeDll")]
public static extern void GetGeneratedKey(
  [In] string code,
  [In] int length,
  StringBuilder key);

This depends highly on what is happening to the variables key and code in the native C function. Based on the signature I am guessing that code is being read from and key is being written to. If that is the case then try the following signature

[DllImport("SomeDll")]
public static extern void GetGeneratedKey(
  [In] string code,
  [In] int length,
  StringBuilder key);
薯片软お妹 2024-08-29 13:01:20

只需使用字符串。应该只是工作。

Just use string. Should just work.

星星的軌跡 2024-08-29 13:01:20

大家的快速回复和支持
我使用了像下面的

VC++ 方法签名这样的方法签名
void GetGenerateKey(char *code, int len, char *key)

C# 签名
[DllImport("SomeDll")]
公共静态 extern void GetGenerateKey(byte[] code, int len, bute key);

nRk

everybody for the quick reply and support
I used method signature like the below

VC++ method signature
void GetGeneratedKey(char *code, int len, char *key)

C# signature
[DllImport("SomeDll")]
public static extern void GetGeneratedKey(byte[] code, int len, bute key);

nRk

天煞孤星 2024-08-29 13:01:20

这是我针对非托管案例的解决方案。

C++

 void GetGeneratedKey(
 const char *code,
 int length,
 char *key);

C#

[DllImport("Some.Dll")]
public static extern void GetGeneratedKey(
[MarshalAs(UnmanagedType.LPStr)]string code,
int length,
[MarshalAs(UnmanagedType.LPStr)]StringBuilder key);

Here is my solution for Unmanaged case.

C++

 void GetGeneratedKey(
 const char *code,
 int length,
 char *key);

C#

[DllImport("Some.Dll")]
public static extern void GetGeneratedKey(
[MarshalAs(UnmanagedType.LPStr)]string code,
int length,
[MarshalAs(UnmanagedType.LPStr)]StringBuilder key);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文