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 several, 04-22-2025, 05:21 AM
      1 response
      168 views
      0 likes
      Last Post frank3456  
      Started by NTEducationTeam, 06-05-2025, 09:43 AM
      0 responses
      91 views
      0 likes
      Last Post NTEducationTeam  
      Started by TheNQKidd, 06-03-2025, 02:51 PM
      1 response
      155 views
      0 likes
      Last Post NinjaTrader_ChelseaB  
      Started by Traydar, 05-29-2025, 01:47 PM
      3 responses
      147 views
      0 likes
      Last Post NinjaTrader_ChelseaB  
      Started by Hwop38, 05-31-2025, 06:27 PM
      0 responses
      102 views
      0 likes
      Last Post Hwop38
      by Hwop38
       
      Working...
      X