Я пытаюсь вызвать функцию С# в dll из неуправляемого стороннего приложения - metatrader
Я последовал совету из раздела Вызов C# dll из неуправляемого кода, однако пример с сортировкой строк не работает.
Примечание. Я успешно вызвал пример целочисленного сложения из справочника (функция «Добавить»), и он работает от начала до конца без проблем, поэтому я знаю, что проблема связана со строками. Т.е. функция "ReplaceString" не работает. Я также просмотрел веб-сайт RobertGisiecke, но там нет примера строки, или я слишком туп, чтобы понять это.
Сообщение об ошибке, которое я получаю в метатрейдере:
15:27:40 10.11.2009, 00:01 MT4LibTest EURUSD,H1: вызов функции 'ReplaceString' из dll 'Testme.dll' критическая ошибка c0000005 at 040B031B.
Платформа — Windows Server 2012 (64-битная), и я скомпилировал ее для x86, потому что Metatrader — это программа для x86.
Еще одна вещь: я не очень опытен в мире VS, поэтому я надеюсь, что кто-то может быть достаточно любезен, чтобы помочь
Спасибо
Код С#:
[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);
РЕДАКТИРОВАТЬ: я должен четко указать, что API метатрейдера, который позволяет писать «скрипты», не допускает полных типов С++. Так что нет ни char, ни wchar, ни тем более указателей на эти типы. Только "строка".
wchar *
. Также смотрите соответствующие вопросы (справа). Например: stackoverflow .com/questions/643202/ - person Jim Mischel   schedule 29.12.2012