Ich möchte DLL laden() mit meiner eigenen, in Visual Studio erstellten DLL verwenden. Hat das schon jemand erfolgreich gemacht?
Wo finde ich Beispielquellcode, der zeigt, wie dies auf der DLL-Seite funktioniert?
Das ist die Richtung, in die ich gehen möchte. Vielen Dank!
Es wäre großartig, eine VS-Beispiellösung/ein Beispielprojekt zum Herunterladen und Kompilieren zu haben.
Vielleicht können Sie etwas vom technischen Support bekommen; Möglicherweise gibt es eine Datei namens ExtFunctionTests, bei der es sich um ein C++-Programm mit einem vollständigen Satz von Beispielen zum Übergeben von Datentypen in und aus einer DLL handelt.
Oder vielleicht führt dies in die richtige Richtung (dies wurde 2009 mit der damals beliebten Version von Visual Studio erstellt). Hier sind die wichtigen Abschnitte. "Sound", weil diese DLL verwendet wurde, um JMP Sound abspielen zu lassen)
Die JMP-Schnittstellenfunktionen in der 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;
}Die .DEF-Datei
; JMPSound.def : Declares the module parameters for the DLL.
LIBRARY "JMPSound"
EXPORTS
; Explicit exports can go here
_JMP_Declarations
Die JSL zum Initialisieren der DLL ist aufgrund der obigen g_Declarations einfach:
dll = loaddll("C:\Documents and Settings\L\Desktop\JMPSound.dll");
dll<<INIT></INIT>"init()" funktioniert einfach. Und "feed()" ist ähnlich und übergibt Arrays ...
data = leftchan || rightchan || col1:*alternate || col2:*alternate || col3:*alternate || col4:*alternate;
dll << feed( data, 0 );
(Der Zweck der DLL bestand darin, Audio-Samples über die Feed-Funktion zu akzeptieren und sie abzuspielen ... während JMP den nächsten Satz von Samples berechnete. Das Threading-Zeug war spezifisch für diese DLL, Sie müssen keine Threads verwenden.)
Siehe Marks Link für JMP-fähige DLLs. Ich habe vor langer Zeit einen gemacht. Um es klar zu sagen, es gibt zwei Arten: JMP-fähige DLLs und alle anderen. Eine JMP-fähige DLL verfügt über einige zusätzliche Informationen, die die Verwendung etwas einfacher machen, und hat wahrscheinlich keine unbrauchbaren Einstiegspunkte. Einstiegspunkte, die komplizierte Strukturen und Zeiger verwenden, die JMP-Datentypen nicht gut zugeordnet werden können, sind wahrscheinlich unbrauchbar.
Ich werde mal schauen, ob ich es finde, es ist ziemlich staubig, wo ich es liegen gelassen habe...
Hier ist ein Beispiel für eine nicht bewusste Verwendung von " PlaySound in der Multimedia-DLL" Audio-Notiz in einem Umschlag
@jschroedl
Und da ist dieser Eintrag in der JMP-Hilfe für DLLs.
Wenn Sie „Hilfe > Skripting-Index“ aufrufen und nach „DLL“ suchen, sollten Sie eine Reihe von Beispielen sehen, um Ihnen den Einstieg zu erleichtern:
