내가 관리되지 않는 타사 응용 프로그램에서 DLL에 교류 # 함수를 호출하기 위해 노력하고있어에 C#을 DLL에서 문자열을 마샬링 - 그러나 Calling C# dll from unmanaged code에서 메타 트레이더콜링/관리되지 않는 코드
내가 따랐다 조언, 마샬링 문자열에 대한 예 작동하지 않습니다.
참고 : 참조 (함수 "추가")에서 정수 추가 예제를 성공적으로 호출했으며 문제없이 끝까지 작동하므로 문자열과 관련이 있다는 것을 알고 있습니다. 즉, "ReplaceString"함수가 작동하지 않습니다. 나는 또한 RobertGisiecke 웹 사이트를 보았지만 그곳에는 문자열 예제가 없거나 너무 멍청해서 알아낼 수 없다.
내가 메타 트레이더 얻을 오류 메시지는 다음과 같습니다
15시 27분 40초 2009년 11월 10일 0시 1분 MT4LibTest EURUSD, H1은 : 040B031B에서 기능 '하고 ReplaceString'전화 DLL에서 'Testme.dll'심각한 오류 C0000005 .
플랫폼에 Windows Server 2012 (64 비트)이며, 메타 트레이더는 86 프로그램이기 때문에 나는 86로 컴파일 한
한가지 더 : 임 바라고 누군가가 친절하게도을 할 수 있도록 내가 아주 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;
}
(메타 트레이더) :
감사합니다
C# 코드 도움
을#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는 '스크립트'허용하지 않는 것이 분명 전체 C++ 유형을 확인해야합니다. 따라서 char, wchar 및 이러한 유형의 포인터가 없습니다. "문자열"만.
에 오신 것을 환영합니다. C++ 응용 프로그램에 C++ 문자열을 전달할 수 없습니다. 아마도'wchar * '으로 만들어야 할 것이다.관련 질문도 참조하십시오 (오른쪽). 예를 들면 다음과 같습니다. http://stackoverflow.com/questions/643202/send-c-string-to-c-sharp-string-interop –
C++ 객체를 인수로 사용하는 함수를 pinvoke 할 수 없습니다. –
이렇게하려면 'C++ calling C#'일을 대신 COM을 사용하는 것이 좋습니다. C#에서 COM 개체를 만들고 C++에서 사용합니다. –