Voglio usare il Carica DLL() con la mia DLL compilata in Visual Studio. Qualcuno l'ha fatto con successo?
Dove posso trovare il codice sorgente di esempio per che mostra come farlo sul lato DLL.
Questa è la direzione in cui voglio andare. Grazie!
Sarebbe bello avere una soluzione/progetto VS di esempio da scaricare e compilare.
Forse puoi ottenere qualcosa dal supporto tecnico; potrebbe esserci un file chiamato ExtFunctionTests che è un programma C++ con un set completo di esempi per passare i tipi di dati dentro e fuori una DLL.
O forse questo andrà nella giusta direzione (questo è stato costruito nel 2009 con qualsiasi versione di studio visivo fosse popolare in quel momento. Ecco le sezioni importanti. "suono" perché questa DLL è stata utilizzata per far riprodurre l'audio a JMP)
L'interfaccia JMP funziona nella DLL:
EXPORTFUNC int __cdecl init( int nCols, int channelMask, int samplesPerSecond, int nRows )
{
if ( theApp.mSoundThread == NULL )
{
theApp.mSoundThread = (SoundThread*)AfxBeginThread( RUNTIME_CLASS(SoundThread), 0, 0, CREATE_SUSPENDED, 0 );
theApp.mSoundThread->init( nCols, channelMask, samplesPerSecond, nRows );
theApp.mSoundThread->ResumeThread();
return 1;
}
return 0;
}
EXPORTFUNC double __cdecl feed( double * matrix, int elements )
{
return theApp.mSoundThread->feed( matrix, elements );
}
LPWSTR g_Declarations = L"\
DeclareFunction(\"init\", Convention( CDECL ), \n\
Arg( Int32, \"nCols\" ), Arg( Int32, \"channelMask\" ), Arg( Int32, \"samplesPerSecond\" ), Arg( Int32, \"nRows\" ), Returns( Int32 ) ) << \n\
DeclareFunction(\"feed\", Convention( CDECL ),\n\
Arg(Double, Array, \"array of nCols channels X nRows samples, -1..+1 \"), Arg(Int32), Returns(Double) );\n\
";
LPCWSTR __stdcall _JMP_Declarations()
{
return g_Declarations;
}Il file .DEF
; JMPSound.def : Declares the module parameters for the DLL.
LIBRARY "JMPSound"
EXPORTS
; Explicit exports can go here
_JMP_Declarations
Il JSL per avviare la DLL è semplice a causa delle g_Declarations sopra:
dll = loaddll("C:\Documents and Settings\L\Desktop\JMPSound.dll");
dll<<INIT></INIT>"init()" funziona e basta. E "feed()" è simile, passando gli array...
data = leftchan || rightchan || col1:*alternate || col2:*alternate || col3:*alternate || col4:*alternate;
dll << feed( data, 0 );
(Lo scopo della DLL era accettare campioni audio attraverso la funzione feed e riprodurli... mentre JMP stava calcolando il successivo set di campioni. Il materiale di threading era specifico per questa DLL, non è necessario utilizzare i thread.)
Vedere il collegamento di Mark per le DLL compatibili con JMP. Ne ho fatto uno, tanto tempo fa. Per essere chiari, ci sono due tipi: DLL compatibili con JMP e tutto il resto. Una DLL compatibile con JMP ha alcune informazioni aggiuntive che la rendono un po' più facile da usare e probabilmente non ha punti di ingresso inutilizzabili. I punti di ingresso che utilizzano strutture complicate e puntatori che non si adattano bene ai tipi di dati JMP sono probabilmente inutilizzabili.
Lo guardo e vedo se riesco a trovarlo, è abbastanza impolverato ovunque l'ho lasciato...
Ecco un esempio di uso non consapevole di " PlaySound nella DLL multimediale" Nota audio in una busta
@jschroedl
E c'è questa voce nella Guida di JMP per le DLL.
Se fai "Aiuto > Indice degli script" e cerchi "DLL", dovresti vedere una serie di esempi per iniziare:
