Ho scritto una libreria con alcune funzioni che vengono esportate. Un esempio:Chiamare un'altra funzione che si trova nell'elenco delle funzioni esportabili
[DllExport("Test", CallingConvention = CallingConvention.StdCall)]
public static void Test() {
MessageBox.Show("Test 1");
}
[DllExport("Test2", CallingConvention = CallingConvention.StdCall)]
public static void TestTwo() {
MessageBox.Show("Test 2");
Test();
//TestThree();
}
public static void TestThree() {
MessageBox.Show("Test 3");
}
quando chiamo Test
da un'applicazione esterna (Delphi) funziona bene e ottengo la finestra di messaggio.
Quando chiamo Test2
, ottengo l'eccezione esterna in Delphi. L'eccezione viene lanciata subito, non mi mostra nemmeno la casella di messaggio Test 2
. Quando chiamo Test2
che a sua volta chiama TestThree
, che non è funzione esportabile, funziona correttamente e ottengo entrambi, casella di messaggio Test 2
e Test 3
.
Perché non posso chiamare altre funzioni esportate nella DLL? C'è un modo in cui posso farlo?
EDIT 1:
A questo punto ho potuto ottenere quello che mi serve nel modo seguente: Creato un'altra funzione non esportabile Test_Local()
, spostato tutto il codice da Test
. Ora, invece di chiamare Test()
da TestTwo
io chiamo Test_Local()
, funzione Test
chiede anche Test_Local();
Tutto funziona bene fino a quando Test_Local()
tenta di eseguire qualsiasi altra funzione esportabile.
Quindi è in qualche modo brutto chiamare funzione esportabile all'interno di un'altra funzione esportabile e non importa quanti strati di funzioni non esportabili ci siano tra di loro.
Penso che tu abbia risposto tu stesso alla domanda. Vorrei solo raccomandare di avvolgere i metodi esportabili in una classe separata e solo mettere una riga di codice per ognuno di essi. Quella linea sarebbe una chiamata al codice esecutivo "effettivo". In questo modo sarà sempre chiaro quali metodi sono "esposti" e che non chiami mai metodi esportabili all'interno del tuo normale codice. – rocky