gpt4 book ai didi

c# - 在将 C++ exe 转换为 dll 并将其用于 C# 后找到入口点

转载 作者:行者123 更新时间:2023-11-30 05:38:51 25 4
gpt4 key购买 nike

我需要将 C++ File.exe 源代码转换为 File.dll 。为此,我将此源的配置类型更改为动态库 (.dll),Visual Studio 构建 File.dll 而不是 File.exe。

现在我正在尝试将此 File.dll 用于我的 C# 项目。这个 dll 入口点是这样的:

   int wmain(int argc, wchar_t* argv[])
{
// codes
}

在此之后,我将参数传递给 CMD 中的 File.exe,例如:

   File.exe -l  -a "This is first arg !"

但现在事情变得复杂了。我知道在 C# 代码中使用 C++ dll 就像:

        [DllImport(@"File.dll" , EntryPoint = "wmain")]
private static extern int wmain(int a , string arg);

我的问题:

1.下面的代码是错误的,因为我不知道如何将 (wchar_t* argv[]) 声明为 C# 变量?!

2.如果我在 C# 中运行下面的代码,它会给出:'无法在 DLL 'File.dll' 中找到名为 'wmain' 的入口点。' 所以看来我应该这样做首先要为 C# 明确入口点。那是什么?!

更新 1: 似乎 this link我的第一个问题有相同的场景,但不同的是我使用数组,我找不到与 c# 中的 (wchar_t) 相同的类。

最佳答案

[DllImport(@"File.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode)]

我并没有真正使用 C#,但是 this答案有上面这行可能会解决第二个问题。

关于第一个问题,你必须测试下一个问题,看看它是否有效,但由于 IntPtr 与指针大小相同,它应该适用于 wchar_t* argv[]也许。哦,差点忘了,您可能需要 unsafe 关键字。

public static extern int wmain(int argc, MarshalAs(UnmanagedType.LPArray)] IntPtr[] argv);

我从 here 得到这个想法.

同样,我几乎从未使用过 C#,但希望这可以帮助您指明正确的方向。

关于c# - 在将 C++ exe 转换为 dll 并将其用于 C# 后找到入口点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32573175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com