Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Altri Linguaggi - Metodo non trovato
Forum - Altri Linguaggi - Metodo non trovato

Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2297
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 12:58
Lunedì, 08/06/2015
Ragazzi sapete dirmi perché ricevo questo errore?


C++

Codice sorgente - presumibilmente C++

  1. #include <windows.h>
  2.  
  3. extern "C" __declspec(dllexport) int __stdcall Addiziona(int a,int b);
  4.  
  5.  
  6.  
  7. int Addiziona(int a, int b )
  8. {
  9.  
  10.    int add;
  11.    __asm__  ("addl %%ebx,%%eax;"
  12.              : "=a" (add)
  13.              : "a" (a), "b" (b));
  14.  
  15.  
  16.  
  17.     return add;
  18. }




C#

Codice sorgente - presumibilmente C++

  1. [DllImport("Invoker.dll")]
  2. static extern int Addiziona(int x, int y);
  3.  
  4.  
  5. public int Prova(int a, int b)
  6.         {
  7.             return Addiziona(a, b);
  8.         }



L'errore è:

Impossibile trovare un punto di ingresso con nome 'Addiziona' nella DLL '\Invoker.dll'.

perché


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
lumo (Member)
Expert


Messaggi: 449
Iscritto: 18/04/2010

Segnala al moderatore
Postato alle 14:10
Lunedì, 08/06/2015
Il codice sembra corretto, magari un problema con le impostazioni di compilazione? O forse non trova il metodo per via del name mangling, ma non dovrebbe essere

PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2297
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 14:39
Lunedì, 08/06/2015
proprio non saprei.
Li dice che non trova il punto di ingresso con nome Addiziona ma mi sembra strano.
perché l'ho dichiarato proprio lì sopra


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
lumo (Member)
Expert


Messaggi: 449
Iscritto: 18/04/2010

Segnala al moderatore
Postato alle 15:26
Lunedì, 08/06/2015
Guarda il disassemblato della DLL e trova il nome della funzione Addiziona (come generato dal compilatore).
Poi usa
Codice sorgente - presumibilmente Plain Text

  1. [DllImport("Invoker.dll", EntryPoint = "nome")]


Ho trovato tecniche simili cercando in giro, basandomi sul presupposto che non lo trovi per via del mangling

PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2297
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 16:01
Lunedì, 08/06/2015
Ahh ecco fatto si ora funziona grazie mille lumo.
Ma come mai succede questo?


in pratica la funzione Addizione è diventata Addiziona@8



https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
lumo (Member)
Expert


Messaggi: 449
Iscritto: 18/04/2010

Segnala al moderatore
Postato alle 19:55
Lunedì, 08/06/2015
Testo quotato

Postato originariamente da Thejuster:

Ahh ecco fatto si ora funziona grazie mille lumo.
Ma come mai succede questo?


in pratica la funzione Addizione è diventata Addiziona@8



Non ne ho idea a dire la verita', forse a C# non e' sufficiente la signature della funzione per dedurre il name mangling della funzione...

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 22:24
Lunedì, 08/06/2015
Potevi usare c++.net se non fossi riuscito

PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2297
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 9:41
Giovedì, 11/06/2015
Ah non sapevo che in c++ .net si poteva usare il blocco asm...

Faccio qualche prova anche con vc++ e vediamo cosa succede


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote