• If this is your first visit, you will have to register before you can post. To view messages, please scroll below and select the forum that you would like to visits. Questions? Be sure to check out the Forum FAQ.

Announcement

Collapse
No announcement yet.

Partner 728x90

Collapse

Load NTDirect.dll from C++ library.

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

    Load NTDirect.dll from C++ library.

    Hello.

    I try load NTDirect.dll from C# like this:
    Code:
    [DllImport("NTDirect.dll")]
    public static extern int Last(string instrument, double price, int size);
    and it work fine. How can i use NTDirect.dll from my C++ dll?
    I try this code:
    Code:
    typedef int(*last_func)(const char* instrument, double price, int size);
    typedef int(*conn_func)(int show_message);
    
    HMODULE nt_lib;
    last_func Last;
    conn_func Connected;
    
    
    BOOL APIENTRY DllMain(HANDLE hModule, DWORD  fdwReason, LPVOID lpReserved)
    {
    	char err_msg[10];
    
    	switch (fdwReason)
    	{
    	case DLL_PROCESS_ATTACH: // Подключение DLL          
    		nt_lib = LoadLibrary("NTDirect.dll");
    
    		if (!nt_lib) {
    			OutputDebugString("could not load the dynamic library");
    
    			sprintf_s(err_msg, "%d", GetLastError());
    			OutputDebugString(err_msg);
    
    			return FALSE;
    		}
    
    		//# resolve function address here
    		Last = (last_func)GetProcAddress(nt_lib, "Last");
    		if (!Last) {
    			OutputDebugString("could not locate the function");
    
    			sprintf_s(err_msg, "%d", GetLastError());
    			OutputDebugString(err_msg);
    
    			return FALSE;
    		}
    
    		//# resolve function address here
    		Connected = (conn_func)GetProcAddress(nt_lib, "Connected");
    		if (!Connected) {
    			OutputDebugString("could not locate the function");
    
    			sprintf_s(err_msg, "%d", GetLastError());
    			OutputDebugString(err_msg);
    
    			return FALSE;
    		}
    
    		break;
    	case DLL_PROCESS_DETACH: // Отключение DLL
    		break;
    	case DLL_THREAD_ATTACH:  // Создание нового потока
    		break;
    	case DLL_THREAD_DETACH:  // Завершение потока
    		break;
    	}
    	return TRUE;
    }
    ....
    const char* instr = "TEST";
    Last(instr, 200, 100);
    and it's not working.

    I have this error:
    Code:
    Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call.  This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.

    #2
    Hello Dzammer,

    Thank you for writing in. Unfortunately this is not supported. This thread will remain open in case any other users may be able to further assist.
    Michael M.NinjaTrader Quality Assurance

    Comment


      #3
      After reinstalling platform, this code worked fine, thanks.

      Comment

      Latest Posts

      Collapse

      Topics Statistics Last Post
      Started by sun0781, Today, 05:02 PM
      0 responses
      6 views
      0 likes
      Last Post sun0781
      by sun0781
       
      Started by ronhb107, 09-12-2019, 10:09 AM
      4 responses
      41 views
      0 likes
      Last Post Mr.Trader  
      Started by rwilliam, Today, 03:55 PM
      0 responses
      3 views
      0 likes
      Last Post rwilliam  
      Started by asmmbillah, Today, 03:42 PM
      2 responses
      7 views
      0 likes
      Last Post asmmbillah  
      Started by NT-Roland, Today, 03:25 PM
      0 responses
      7 views
      0 likes
      Last Post NT-Roland  
      Working...
      X