Zanim zajalem sie moja misja, postanowilem potestowac "co MT4 na to".
Testy nie byly optymistyczne. Wywolujac moja biblioteke pod aplikacja pisana w c/c++ tworzylo sie okno. Natomiast jak wywoluje to spod MT4 poprzez skrypt zwraca blad instancji.
btw: funkcja kwadrat dziala bez zarzutu.
Byc moze moglby ktos pomoc?
Zalaczem wszyskie 3 kody zrodlowe. Kompilator Dev C++
Kod: Zaznacz cały
#ifndef _DLL_H_
#define _DLL_H_
#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */
extern "C"
{
double DLLIMPORT kwadrat( double liczba );
}
extern "C"
{
int DLLIMPORT okno();
}
class DLLIMPORT DllClass
{
  public:
    DllClass();
    virtual ~DllClass(void);
  private:
};
#endif /* _DLL_H_ */
Kod: Zaznacz cały
/* Replace "dll.h" with the name of your header */
#include "dll.h"
#include <windows.h>
DllClass::DllClass()
{
}
DllClass::~DllClass ()
{
}
HINSTANCE x;
HWND hwnd;
    double DLLIMPORT kwadrat( double liczba ){
        
      
    return(liczba*liczba);       
    };
int APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,
                       DWORD reason        /* Reason this function is being called. */ ,
                       LPVOID reserved     /* Not used. */ )
{
                         
                             
                       
    switch (reason)
    {
      case DLL_PROCESS_ATTACH:
           
       x = hInst;
       MessageBox( NULL, "TEXT", "main", MB_OK | MB_ICONWARNING | MB_DEFBUTTON2 | MB_OKCANCEL );
           
        break;
      case DLL_PROCESS_DETACH:
        break;
      case DLL_THREAD_ATTACH:
           
              
        break;
      case DLL_THREAD_DETACH:
        break;
    }
    /* Returns TRUE on success, FALSE on failure */
    return 1;
}
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    switch( msg )
    {
    case WM_CLOSE:
        DestroyWindow( hwnd );
        break;
       
    case WM_DESTROY:
        PostQuitMessage( 0 );
        break;
        
        default:
		return DefWindowProc( hwnd, msg, wParam, lParam );
    }
}
int okno(  )
{
   
   //MessageBox( NULL, "TEXT", "main", MB_OK | MB_ICONWARNING | MB_DEFBUTTON2 | MB_OKCANCEL );
   
    WNDCLASSEX wc;
   
   HWND hWin = GetActiveWindow();
  // HINSTANCE hInstance = GetWindowLong( hWin, GWL_HINSTANCE);
   
    wc.cbSize = sizeof( WNDCLASSEX );
    wc.style = 0;
    wc.lpfnWndProc = WndProc; //obsluga komunikatow
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = x;
    //(HINSTANCE)GetWindowLong( hWin, GWL_HINSTANCE);
    wc.hIcon = LoadIcon( NULL, IDI_APPLICATION );
    wc.hCursor = LoadCursor( NULL, IDC_ARROW );
    wc.hbrBackground =( HBRUSH )( COLOR_WINDOW + 1 ); //kolor tla
    wc.lpszMenuName = NULL;
    wc.lpszClassName = "Nazwa_Klasy";
    wc.hIconSm = LoadIcon( NULL, IDI_APPLICATION );
	wc.style = CS_DBLCLKS;
   
   
 //  RegisterClassEx( & wc );
    if( !RegisterClassEx( & wc ) )
    {
        return 2;
     
        
    }
  
    // TWORZENIE OKNA
       
    hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, "Nazwa_Klasy", "Nazwa_Okna", WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, CW_USEDEFAULT, 500, 500, NULL, NULL, x, NULL );
    if( hwnd == NULL ) return 4;
    
    ShowWindow( hwnd, 1 ); // Pokaż okienko...
    UpdateWindow( hwnd );
}
Kod: Zaznacz cały
#import "teest.dll"
   double kwadrat(double say);
#import
#import "test_ApiDLL.dll"
   int okno();
#import
int start()
  {
  // Print( kwadrat(4) );
   
   Print(okno());
   
   return(0);
  }
							
