我正在尝试从非托管的第 3 方应用程序调用 dll 中的 ac# 函数 - metatrader
我遵循了从非托管代码调用 C# dll 的建议, 但是关于编组字符串的示例不起作用。
注意:我已经成功地从参考中调用了整数加法示例(函数“Add”),它端到端地工作没有问题,所以我知道问题与字符串有关。即,“ReplaceString”功能不起作用。我还查看了 RobertGisiecke 网站,但那里没有字符串示例,或者我太笨了,无法弄清楚。
我在 metatrader 中收到的错误消息是:
2009.11.10 00:01 15:27:40 MT4LibTest EURUSD,H1:从 040B031B 的 dll 'Testme.dll' 严重错误 c0000005 调用函数'ReplaceString'。
平台是 Windows Server 2012 (64bit) 我已经编译到 x86 因为 Metatrader 是一个 x86 程序
还有一件事:我对VS世界不是很有经验,所以我希望有人能提供帮助
谢谢
C#代码:
[DllExport("ReplaceString", CallingConvention = CallingConvention.StdCall)]
public static int ReplaceString(
[In, Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder str,
[MarshalAs(UnmanagedType.LPWStr)]string a,
[MarshalAs(UnmanagedType.LPWStr)]string b)
{
str.Replace(a, b);
if (str.ToString().Contains(a)) return 1;
else
return 0;
}
调用函数(Metatrader):
#import "MT4Lib.dll"
int ReplaceString(string & str,string a,string b);
int Add(int x, int y);
#import
string str="A quick brown fox jumps over the lazy dog";
string stra = "fox";
string strb = "cat";
Print(str);
Print(ReplaceString(str,stra,strb));
Print(str);
编辑:我应该明确一点,允许编写“脚本”的 metatrader API 不允许完整的 C++ 类型。所以没有 char,没有 wchar,当然也没有指向这些类型的指针。只有“字符串”。