2013-02-27 1 views
0

VB.Net을 사용하여 MetaTrader4 용 DLL을 만들려고합니다. 대부분의 예제는 C++에 있지만 VB.Net에서 수행 할 수 있습니다. C++보다 조금 더 까다 롭습니다.VB.Net을 사용하여 MetaTrader4 DLL 만들기

누구나 올바른 방향으로 나를 가리킬 수 있습니까? MT4_EXPFUNC __declspec (dllexport) 정의에 대한 내용

답변

3

마침내 어떻게하는지 알아 냈습니다. 이상적인 솔루션은 아니지만 작동합니다. 저는 "미래 세대"를 위해 여기에서 문서화하고 있습니다.

기본적으로 관리되는 .Net 클래스 메서드를 직접 관리되지 않는 함수로 변환하는 DLLExporter.Exe라는 프로그램을 사용하고 있습니다. 그것은에서 내 VB.Net 코드의 http://www.codeproject.com/Articles/37675/Simple-Method-of-DLL-Export-without-C-CLI

샘플 : 위의 코드를 컴파일 한 후

Imports System.Runtime.InteropServices 
Public Class myFXTrader 

    <DllExporter.DllExport()> 
    Public Shared Function storeFXRatesIntoSQL(
               <MarshalAsAttribute(UnmanagedType.LPWStr)> pvsBroker As String _ 
               , <MarshalAsAttribute(UnmanagedType.LPWStr)> pvsSymbol As String _ 
               , <MarshalAsAttribute(UnmanagedType.LPWStr)> pvsTimeStamp As String _ 
               , pviAsk As Double _ 
               , pviBid As Double) As <MarshalAsAttribute(UnmanagedType.LPWStr)> String 
     Dim vsErrorCode As String = "" 
     '--------------------------------- 
     Try 
      '... do some work here ... 
     Catch ex As Exception 
     End Try 
     '--------------------------------- 

     Return vsErrorCode 
    End Function 
End Class 

, 난 그냥 DLLExporter myFXTrader.dll 실행하고 그것이 마술 할 것입니다. 결과 .dll 파일은 MT4의 라이브러리 폴더에 복사 할 수 있으며 #import이 될 수 있습니다. 이 아웃이 같은 일을 시도 누가 누구든지 도움이 될 것입니다

#import "FXTrader.Exports.dll" 
    string storeFXRatesIntoSQL(string pvsBroker, string pvsSymbol, string pviTimeStamp, double pviAsk, double pviBid); 
#import 

int start() 
{ 
    Comment(storeFXRatesIntoSQL(AccountCompany(), Symbol(), TimeLocal(), Ask, Bid)); 
    int err; 
    err = GetLastError(); 
    if(err>0) { Alert(err); } 
    return(0); 
} 

희망 : 샘플을 아래 Expert Advisor 코드를 참조하십시오. 나는 이것을 이해하기 위해 꽤 많은 독서/연구를해야했다.

1

metatrader의 공식 예제는 찾을 수 없습니다. 그들의 지원은 항상 덜 도움이됩니다.

당신이 지적한 api는 실제로 C++이며, 네이티브를 의미합니다. 당신은 vb.net에서 뭔가를 쓸 찾고 있습니다. .Net은 관리되는 코드로 vb 또는 C# 또는 f #를 원한다면 네이티브 API 및 데이터 구조를 관리 대상으로 변환하는 변환 계층이 필요합니다.

C++/cli를 살펴보십시오. Cli는 네이티브 코드와 관리 코드를 동일한 어셈블리에서 혼합 할 수있게 해주는 프레임 워크입니다.

__declspec (dllexport)은 DLL의 사용자가 볼 수 있도록 코드에서 호출 할 수 있도록 네이티브 dll에서 내보내는 함수를 링커에 알리는 명령어입니다. 이와 같은 함수를 내보낼 때 그것은 여전히 ​​기본 함수입니다.

관리자 또는 서버 API를 구현하려는 경우 확실하지 않습니다. 관리자의 경우 전체 API는 클래스에 있으며, 포인터는 관리자 dll이 내 보낸 유일한 함수에 의해 제공됩니다. 서버의 경우에는 dll을 서버에 플러그인으로 쓰는 것이므로 이론 상으로는 플러그인의 모든 함수를 내보낼 수 있지만 입력 및 출력 유형은 네이티브로 유지됩니다. 변환기를 작성하거나 내 보낸 함수에서 pinvoke를 사용하십시오. pinvoke에 대한 설명은 다음과 같습니다 http://www.codeproject.com/Articles/4965/Using-Platform-Invoke

어떤 경우에도 네이티브 C++ 코드를 작성해야합니다.

+0

감사를 사용하는 문제가되지 않습니다. 도움이됩니다. 그러나 나는 이미 그것을하는 방법, 이상이 아니라 대답을 발견했습니다. 내 대답을 보라. 환호했다. –

0

mtmanapi에 대한 거의 모든 액세스 권한을 제공하는 오픈 소스 프로젝트가 있습니다 : MetaTrader4.Manager.Wrapper.

그것은/CLI C++로 작성, 그래서는 정보를 원하시면 VB.NET에서

+0

관리자 만 MT4 서버에 액세스 할 수있는 프로젝트가 아닙니까? 나는 그것이 MT4 클라이언트를위한 것이라고 생각하지 않았다. –

+0

예, 관리자 액세스 전용입니다. – Uriil