#import "MT4iQuickChannel.dll"int QC_StartSender( string );
int QC_ReleaseSender( int );
int QC_SendMessage( int SenderHandle, string Message, int Flags);
#import
#import "kernel32.dll"void OutputDebugStringW( string msg);
#import
externstring ChannelName = "QuickChannelTest" ;
externbool LogMessagesToDbgView = true ;
int glbHandle = 0 ;
void init()
{
glbHandle = QC_StartSender(ChannelName);
if (glbHandle == 0 ) {
Alert ( "Failed to get a QuickChannel sender handle" );
}
}
void deinit()
{
QC_ReleaseSender(glbHandle);
glbHandle = 0 ;
}
void start()
{
if (glbHandle != 0 ) {
string strMsg = StringConcatenate ( "我的天哪" , TimeToStr ( TimeLocal (), TIME_SECONDS ), ": " , Symbol () , "," , DoubleToStr ( Bid , MarketInfo ( Symbol (), MODE_DIGITS )) , "," , DoubleToStr ( Ask , MarketInfo ( Symbol (), MODE_DIGITS )));
if (LogMessagesToDbgView) OutputDebugStringW( "Message " + strMsg);
int result = QC_SendMessage(glbHandle, strMsg, 0 );
if (result == 0 ) Alert ( "QuickChannel message failed" );
printf (strMsg);
}
}
#import "MT4iQuickChannel.dll"int QC_StartReceiver( string , int );
int QC_ReleaseReceiver( int );
int QC_GetMessages3( int , string & arr[], int );
#import
#import "kernel32.dll"void OutputDebugStringW( string msg);
#import
externstring ChannelName = "QuickChannelTest" ;
externbool LogMessagesToDbgView = true ;
int glbHandle = 0 ;
string glbReceiveBuffer = "" ;
void init()
{
glbReceiveBuffer = "12345678" ;
for ( int i = 0 ; i < 4 ; i++) glbReceiveBuffer = StringConcatenate (glbReceiveBuffer, glbReceiveBuffer);
}
void deinit()
{
QC_ReleaseReceiver(glbHandle);
glbHandle = 0 ;
}
void start()
{
if (glbHandle == 0 ) {
glbHandle = QC_StartReceiver(ChannelName, WindowHandle ( Symbol (), Period ()));
if (glbHandle == 0 ) {
Alert ( "Failed to get a QuickChannel receiver handle" );
}
}
if (glbHandle != 0 ) {
string arrBuffer[ 1 ];
arrBuffer[ 0 ] = StringConcatenate (glbReceiveBuffer, "" ); // Use copy of buffer templateint res = QC_GetMessages3(glbHandle, arrBuffer, StringLen (arrBuffer[ 0 ]));
if (res == 2 ) {
Alert ( "QuickChannel buffer is not large enough!" );
} elseif (res == 1 ) {
} else {
string strMsgList = arrBuffer[ 0 ];
if (strMsgList != "" ) {
string Messages[];
StringSplit (strMsgList, "\t" , Messages);
for ( int i = 0 ; i < ArraySize (Messages); i++) {
string strMsg = Messages[i];
if (LogMessagesToDbgView) OutputDebugStringW( "..." + strMsg);
Comment (strMsg);
Print (strMsg);
} } } }}
voidStringSplit ( string InputString, string Separator, string & ResultArray[])
{
ArrayResize (ResultArray, 0 );
int lenSeparator = StringLen (Separator), NewArraySize;
while (InputString != "" ) {
int p = StringFind (InputString, Separator);
if (p == - 1 ) {
NewArraySize = ArraySize (ResultArray) + 1 ;
ArrayResize (ResultArray, NewArraySize);
ResultArray[NewArraySize - 1 ] = InputString;
InputString = "" ;
} else {
NewArraySize = ArraySize (ResultArray) + 1 ;
ArrayResize (ResultArray, NewArraySize);
ResultArray[NewArraySize - 1 ] = StringSubstr (InputString, 0 , p);
InputString = StringSubstr (InputString, p + lenSeparator);
if (InputString == "" ) {
ArrayResize (ResultArray, NewArraySize + 1 );
ResultArray[NewArraySize] = "" ;
} } }}
안녕, 코더, 이것은 MT4iQuickChannel.dll 발신자-수신자 메시지 예입니다. mt4 v509에서는 작동했지만 v600+에서는 작동하지 않습니다. 문제가 16비트 유니코드에 관한 것임을 알고 있지만 해결할 수 없으므로 모든 사람이 할 수 있습니다. 도와 줘요?
ORACLE DB에 연결하는 것이 좋습니다! 그러나 mql4를 사용하여 ORACLE에서 어떻게 읽고 쓰나요?
그리고 어디서 oraDLL.dll을 얻었습니까?
미리 THX!
남자 이름
믹,
내가 제공한 것은 Oracle Pro*C 프리컴파일러를 사용하는 코드 조각입니다. EXEC SQL CONNECT와 동일합니다. 아래 샘플을 보십시오. 코드를 작성한 다음 함수 호출에서 DLL의 일부로 컴파일하는 C 코드를 생성하는 Oracle Pro*C 사전 컴파일러를 통해 이를 실행합니다. 이를 수행하려면 Oracle에 대해 알아야 하고 사전 컴파일러를 포함하여 Oracle DB 및 클라이언트 소프트웨어를 가져와야 합니다. 나는 아주 오랫동안 oracle을 사용해 왔으며 단순히 익숙하기 때문에 다른 모든 사람들보다 그것을 선호합니다.
행운을 빕니다.
EXEC SQL WHENEVER NOT FOUND DO sql_error( "ORACLE error--\n" );
EXEC SQL SELECT 'Col1' , 'Col2'
INTO :stringrec INDICATOR :string_ind /* note insert into array variable */
FROM dual
WHERE :bindval1 = :bindval1
AND :string1 = :string1;
Oracle Pro*C 사전 컴파일러는 기본 API인 OCI - Oracle Call Interface 를 사용 하여 Oracle과 인터페이스 하기 위해 위에서 C 코드 를 생성합니다.
내가 제공한 것은 Oracle Pro*C 프리컴파일러를 사용하는 코드 조각입니다. EXEC SQL CONNECT와 동일합니다. 아래 샘플을 보십시오. 코드를 작성한 다음 함수 호출에서 DLL의 일부로 컴파일하는 C 코드를 생성하는 Oracle Pro*C 사전 컴파일러를 통해 이를 실행합니다. 이를 수행하려면 Oracle에 대해 알아야 하고 사전 컴파일러를 포함하여 Oracle DB 및 클라이언트 소프트웨어를 가져와야 합니다. 나는 아주 오랫동안 oracle을 사용해 왔으며 단순히 익숙하기 때문에 다른 모든 사람들보다 그것을 선호합니다.
행운을 빕니다.
Oracle Pro*C 사전 컴파일러는 기본 API인 OCI - Oracle Call Interface 를 사용 하여 Oracle과 인터페이스 하기 위해 위에서 C 코드 를 생성합니다.
32비트 버전의 Oracle Instant Client가 필요하다는 사실을 잊어버렸습니다. http://www.oracle.com/technetwork/topics/winsoft-085727.html, 64비트는 MetaTrader 플랫폼에서 작동하지 않습니다. . DB는 64비트 버전일 수 있습니다. Oracle을 알아야 합니다. Oracle은 복잡한 소프트웨어입니다. 무료로 개발할 수 있습니다. Oracle에 등록하기만 하면 됩니다. 등록은 무료입니다. 모든 Oracle 다운로드는 무료입니다.
네, 맞습니다. ORACLE은 복잡한 소프트웨어입니다. 나는 몇 년 동안 ORACLE과 함께 일했는데(그러나 SQL과 PL/SQL만), 이것이 최고의 데이터베이스입니다. 불행히도 저는 Pro*C 컴파일러나 DLL로 개발하지 않았습니다. 그래서 제가 하기가 상당히 어렵습니다. 하지만 난 노력할거야! :-)
이것은 코드이며, 두 개의 MT에 설치하고 두 개의 터미널과 통신하는 데 사용합니다.
애플파티 정말 감사합니다!
당신을 환영합니다. 코드는 v600+에서 작동하지 않으므로 문제를 해결하는 방법을 알려주실 수 있다면 대단히 감사합니다!
@고릭:
ORACLE DB에 연결하는 것이 좋습니다! 그러나 mql4를 사용하여 ORACLE에서 어떻게 읽고 쓰나요?
그리고 어디서 oraDLL.dll을 얻었습니까?
미리 THX!
남자 이름
m.mick과 같은 질문이 있습니다.
oraDLL.dll은 어디에서 다운로드할 수 있으며 ORACLE-DB로 읽고 쓰는 것은 어떻게 구현됩니까?
나를 도와주는 THX 4!
@고릭:
ORACLE DB에 연결하는 것이 좋습니다! 그러나 mql4를 사용하여 ORACLE에서 어떻게 읽고 쓰나요?
그리고 어디서 oraDLL.dll을 얻었습니까?
미리 THX!
남자 이름
믹,
내가 제공한 것은 Oracle Pro*C 프리컴파일러를 사용하는 코드 조각입니다. EXEC SQL CONNECT와 동일합니다. 아래 샘플을 보십시오. 코드를 작성한 다음 함수 호출에서 DLL의 일부로 컴파일하는 C 코드를 생성하는 Oracle Pro*C 사전 컴파일러를 통해 이를 실행합니다. 이를 수행하려면 Oracle에 대해 알아야 하고 사전 컴파일러를 포함하여 Oracle DB 및 클라이언트 소프트웨어를 가져와야 합니다. 나는 아주 오랫동안 oracle을 사용해 왔으며 단순히 익숙하기 때문에 다른 모든 사람들보다 그것을 선호합니다.
행운을 빕니다.
Oracle Pro*C 사전 컴파일러는 기본 API인 OCI - Oracle Call Interface 를 사용 하여 Oracle과 인터페이스 하기 위해 위에서 C 코드 를 생성합니다.
믹,
내가 제공한 것은 Oracle Pro*C 프리컴파일러를 사용하는 코드 조각입니다. EXEC SQL CONNECT와 동일합니다. 아래 샘플을 보십시오. 코드를 작성한 다음 함수 호출에서 DLL의 일부로 컴파일하는 C 코드를 생성하는 Oracle Pro*C 사전 컴파일러를 통해 이를 실행합니다. 이를 수행하려면 Oracle에 대해 알아야 하고 사전 컴파일러를 포함하여 Oracle DB 및 클라이언트 소프트웨어를 가져와야 합니다. 나는 아주 오랫동안 oracle을 사용해 왔으며 단순히 익숙하기 때문에 다른 모든 사람들보다 그것을 선호합니다.
행운을 빕니다.
Oracle Pro*C 사전 컴파일러는 기본 API인 OCI - Oracle Call Interface 를 사용 하여 Oracle과 인터페이스 하기 위해 위에서 C 코드 를 생성합니다.
32비트 버전의 Oracle Instant Client가 필요하다는 사실을 잊어버렸습니다. http://www.oracle.com/technetwork/topics/winsoft-085727.html, 64비트는 MetaTrader 플랫폼에서 작동하지 않습니다. . DB는 64비트 버전일 수 있습니다. Oracle을 알아야 합니다. Oracle은 복잡한 소프트웨어입니다. 무료로 개발할 수 있습니다. Oracle에 등록하기만 하면 됩니다. 등록은 무료입니다. 모든 Oracle 다운로드는 무료입니다.
고릭:
네, 맞습니다. ORACLE은 복잡한 소프트웨어입니다. 나는 몇 년 동안 ORACLE과 함께 일했는데(그러나 SQL과 PL/SQL만), 이것이 최고의 데이터베이스입니다. 불행히도 저는 Pro*C 컴파일러나 DLL로 개발하지 않았습니다. 그래서 제가 하기가 상당히 어렵습니다. 하지만 난 노력할거야! :-)
당신의 훌륭한 작품에 대해 몇 가지 질문이 있습니다.
컴파일(빌드 610)하려고 하면 "배열은 참조로만 전달됨"과 같은 오류 메시지가 나타납니다. 왜요? 어떻게 해야 하나요? 문자열이 아닌 uchar[]를 사용한 이유는 무엇입니까? Pro*C-Compiler 때문일까요?
DLL은 어떻게 개발했나요? MT4에서도? 메타에디터에서 컴파일 후 *.ex4-File을 받습니다.... .
Pro*C 프리컴파일러에서 .c 파일을 받은 경우 해당 파일을 어떻게 처리해야 합니까? 해당 코드로 DLL을 어떻게 개발하거나 생성합니까?
Oracle Instant Client는 oraDLL을 사용해야 하는 모든 클라이언트에 필수입니다. 권리?
미리 THX!!!
ORACLE Pro*C Compiler를 사용하면 생성된 코드를 dll에 삽입한 후 많은 오류가 발생합니다.
다음은 dll을 컴파일한 후의 몇 가지 문제입니다.
- UNAME_LEN, PWD_LEN 및 DBSTRING_LEN 선언이 누락되었습니다.
- EXPORT 가 올바른 단어입니다. 오류가 발생합니다. extern이 옳은 표현이 아닙니까?
- connect1(및 2 및 3)은 다른 유형입니다. 선언에서 char ** 및 사용법(strncpy)에서만 char *; 더 이상 사용되지 않으며 strncpy_s를 사용해야 합니다.
- sqlca가 선언되지 않음
- ...
아무도 도와주세요?
미리 THX,
남자 이름