Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di atm
    Registrato dal
    Nov 2009
    Messaggi
    54

    C# e C++ Allocazione memoria

    Ciao ragazzi,
    il mio problema è il seguente:
    ho una dll con un metodo che deve essere chiamato da un'applicazione c#.

    Quando invoco la funzione c'è un allocazione costante.

    Vi posto il codice:

    Dll (c++)

    codice:
    extern "C"
    {
    	void sendMsg(const char* msg)
    	{
    		printf("\n Ricevuto il msg: %s", msg);
    		return 0;
    	}
    }
    EXE (c#)
    codice:
            [DllImport("TestDLL.dll", EntryPoint = "sendMsg")]
            public static extern void sendMsg(string message);
    
            public MiaClasse(){
                  for(int i = 0; i < 100; i++){
                         sendMsg("invio");
                  }
            }
    Dove sbaglio? O meglio come posso fare per deallocare la stringa passata?

    Grazie

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Re: C# e C++ Allocazione memoria

    Originariamente inviato da atm
    Dove sbaglio? O meglio come posso fare per deallocare la stringa passata?
    Qual è il problema specifico che riscontri?

    In ogni caso, se non ricordo male, è preferibile passare uno StringBuilder.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Cosa devi deallocare? Dove hai allocato spazio? Solo se hai esplicitamente allocato allora devi liberare la memoria ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it L'avatar di atm
    Registrato dal
    Nov 2009
    Messaggi
    54
    Allocazione di memoria di 8kb ad ogni chiamata!!!

  5. #5
    Utente di HTML.it L'avatar di atm
    Registrato dal
    Nov 2009
    Messaggi
    54
    Originariamente inviato da oregon
    Cosa devi deallocare? Dove hai allocato spazio? Solo se hai esplicitamente allocato allora devi liberare la memoria ...
    In realtà da nessuna parte... E' per questo che mi è strano...

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Intanto una

    return 0;

    per una funzione void non ha senso (e dovrebbe darti un errore).

    Ma questo non è un problema ...

    Puoi inviare un link per scaricare i due progetti di prova?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it L'avatar di atm
    Registrato dal
    Nov 2009
    Messaggi
    54
    Originariamente inviato da oregon
    Intanto una

    return 0;

    per una funzione void non ha senso (e dovrebbe darti un errore).

    Ma questo non è un problema ...

    Puoi inviare un link per scaricare i due progetti di prova?
    Si hai ragione quello era commentato e nell'allineare il codice qui nel forum ho tolto il commento. Comunque posso allegare i due progetti come rar. Tanto sono pochissimi kb..

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non credo tu possa allegare il rar, ma puoi renderlo disponibile tramite un link su sito remoto
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it L'avatar di atm
    Registrato dal
    Nov 2009
    Messaggi
    54
    Originariamente inviato da oregon
    Non credo tu possa allegare il rar, ma puoi renderlo disponibile tramite un link su sito remoto


    Guarda quello che ho fatto è creare un'applicazione Form in c# con VS 2010.

    Nel costruttore della form ho messo il ciclo for.

    Poi ho creato una Libreria di classi in C++ sempre con VS 2010 e dichiarato la funzione esterna. Niente di più.

    Ora sto leggendo in giro che bisogna usare Marshal... Boh!!!

  10. #10
    Non vorrei sbagliarmi, ma la deallocazione la dovrebbe gestire il marshaling .NET, esattamente come succede quando da .NET richiami una API di Windows. Non dovrebbe essere quindi necessario fare nulla per deallocare, se ne occuperà il marshaling .NET e la GC.

    Per inciso, perché hai creato un progetto libreria di classi C++? In questa maniera crei una dll managed in C++/CLI (anzi, probabilmente un assembly ibrido CLI/nativo), mentre credo che quello che tu voglia sia una dll nativa...
    Amaro C++, il gusto pieno dell'undefined behavior.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.