Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    34

    [C++] Problema con parametri stringhe

    Scrivo qui anche se non so se qualcuno mi risponderà visto che non è un problema riguardante linux.
    Devo sviluppare un software per della videosorveglianza utilizzando un SDK che lavoro sotto ambiente windows :muro: e già questo è un problema.
    Purtroppo non posso cambiare e perciò arriviamo al mio problema principale.
    Io dovrei chiamare questa funzione:
    codice:
    void SetConnectionInfo( 
          long hDevice,  
          BSTR szVendorName,  
          BSTR szModelName,  
          long nAddressType,  
          BSTR szAddress,  
          long nPort,  
          long nHttpPort,  
          BSTR szUserID,  
          BSTR szPassword 
    );
    ma quando lo faccio così:
    codice:
            CString Ip(strIpAddress);
    	CString user(strUser);
    	CString passwd(strPassword);
    	CString model(strModel);
            device.SetConnectionInfo(m_hDevice,_T("Samsung"),model,XADDRESS_IP,Ip,port,0,user,passwd);
    mi compare un errore
    codice:
    Eccezione first-chance a 0x00fa2e6d in Player_Samsung.exe: 0xC0000005: Violazione di accesso nella lettura del percorso 0xcccccccc.
    che sta ad indicare che la memoria non viene correttamente inizializzata ma sinceramente non capisco perchè.
    Non sono molto pratico del cpp ma non mi sembra di avere fatto c...te
    Grazie a tutti.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,461
    Il metodo SetConnectionInfo quali tipi di dati accetta?

    Hai il prototipo?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    34
    Originariamente inviato da oregon
    Il metodo SetConnectionInfo quali tipi di dati accetta?

    Hai il prototipo?
    Si è il primo spezzone di codice che ho postato se intendi quello...

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,461
    Ah ... scusa ... la stanchezza, mi sembrava una struttura ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    34
    cmq non credo sia un problema di parametri o meglio di concordanza tra i tipi ma più che altro come vengono inizializzati.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,461
    No ... invece dato che hai delle CString e devi utilizzare delle BSTR devi chiamare il metodo così

    codice:
    SetConnectionInfo(m_hDevice, vendor.AllocSysString(), model.AllocSysString(), XADDRESS_IP, Ip.AllocSysString(), port, 0, user.AllocSysString(), passwd.AllocSysString());
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    34
    Ciao ho provato come hai detto tu ma non ho ancora risolto ho fatto alcuni cambiamenti al codice ti posto le parti modificate da me in modo che potete capire meglio e magari dirmi dove sbaglio.
    file.h
    codice:
    public:
    	void OnInitParam();
    	void OnInitXnsSdk();
    	void OnEnableControlWindows(bool bCheck);
    	void OnConnect();
    	////////////////////// Device Handler
    	long m_hDevice;
    	long m_nControlId;
    
    	CString strModel;													// Model Name 
    	CString strIpAddress;					// IP Address 
    	CString strPassword;
    	CString strUser;
    	long port;
    	int n_camera;
    	CListBox m_ctrlLogList;
    
    	afx_msg void OnBnClickedButton1();
    file.cpp
    codice:
    void CPlayer_SamsungDlg::OnBnClickedButton1()
    {
    	CString vendor(_T("Samsung"));
    	// TODO: aggiungere qui il codice per la gestione della notifica del controllo.
    	device.SetConnectionInfo(m_hDevice,vendor,strModel,XADDRESS_IP,strIpAddress,port,0,strUser,strPassword);	
    
    	/*long nRet1 = device.ConnectNonBlock(
    		m_hDevice,														// [in] Device handle
    		true,															// [in] Flag to decide where to forcibly log in or not.
    		true);															// [in] If this value is 1, try to connect again.
    
    	if(nRet1 != ERR_SUCCESS)
    	{
    		CString messaggio;
    		messaggio.Format(_T("ConnectNonBlock() fail: errno=[%d](%s)\n"), 
    			nRet1, device.GetErrorString(nRet1));
    		m_ctrlLogList.AddString(messaggio);
    	}*/
    }
    
    void CPlayer_SamsungDlg::OnInitParam(void)
    {	LPWSTR *szArglist;
       int nArgs;   
       
       szArglist = CommandLineToArgvW(GetCommandLine(), &nArgs);
       if( NULL == szArglist )
       {
          printf("CommandLineToArgvW failed\n");
       }
       strIpAddress.Format(L"%s",szArglist[1]);// = CString(szArglist[1]);
       port = _ttoi(szArglist[2]);
       strModel.Format(L"%s",szArglist[3]);
       strUser.Format(L"%s",szArglist[4]);
       strPassword.Format(L"%s",szArglist[5]);
       n_camera = _ttoi(szArglist[6]);
       CString messaggio;
       messaggio.Format(_T("Ip: %s, port: %d, Model: %s, User: %s, Passwd: %s, n_camera: %d\n"),strIpAddress,port,strModel,strUser,strPassword,n_camera);
       m_ctrlLogList.AddString(messaggio);
       
    }
    Il problema probabilmente sta nel come gestisco le stringhe in quanto non sono molto esperto del cpp e ancora meno di window se qualcuno ha qualche suggerimento perchè io non so più dove sbattere la testa.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,461
    Non hai risolto nel senso che hai ancora quel messaggio d'errore indicato all'inizio?

    Vedo che non hai modificato i parametri della SetConnectionInfo ...

    E poi, devi proprio lavorare con Unicode?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    34
    Ciao i parametri li avevo cambiati ma li ho riportati come li vedi in quanto mi dava cmq lo stesso errore e poi nel .h la funzione SetConnectionInfo è definita così:
    codice:
    void SetConnectionInfo(long hDevice, LPCTSTR szVendorName, LPCTSTR szModelName, long nAddressType, LPCTSTR szAddress, long nPort, long nHttpPort, LPCTSTR szUserID, LPCTSTR szPassword)
    	{
    		static BYTE parms[] = VTS_I4 VTS_BSTR VTS_BSTR VTS_I4 VTS_BSTR VTS_I4 VTS_I4 VTS_BSTR VTS_BSTR ;
    		InvokeHelper(0x1c, DISPATCH_METHOD, VT_EMPTY, NULL, parms, hDevice, szVendorName, szModelName, nAddressType, szAddress, nPort, nHttpPort, szUserID, szPassword);
    	}
    Non so se cambia qualcosa ai fini del parametro.
    Il messaggio che compare è sempre quello anche se cambia il primo indirizzo (dovrebbe essere normale).
    Per quanto riguarda unicode posso solo dirti
    Grazie della tua disponibilità

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.