I-Software beizubehalten, die in C implementiert ++ sondern muss Oberflächen in mehreren Sprachen wie Java und .NET, sondern auch delphi und VB6 einschließlich. Außerdem muss es auf mehreren Plattformen laufen (Java muss also unter Unix arbeiten).
Die Art und Weise, wie es gemacht wurde, war, eine einzelne DLL zu verwenden, die normale C-Funktionen exportiert, die primitive Typen verwenden. Um zum Beispiel eine Klasse Foo gegeben:
long MY_EXPORT_FLAG FooCreate()
{
return (long)new Foo();
}
void MY_EXPORT_FLAG FooDestroy(long Handle)
{
delete (Foo*)Handle;
}
void MY_EXPORT_FLAG BarMethod(long Handle, const char* pStr1, long* pReturnValue)
{
*pReturnValue = ((Foo*)Handle)->BarMethod(pStr1);
}
dann Ihre JNI/.NET/VB6/Delphi Code implementiert sprachspezifische Klassen-Wrapper, aber diese C-DLL-Funktionen aufrufen. Jeder Klassenwrapper enthält einen Handle und gibt ihn an die C-Funktionen weiter.
Das funktioniert ganz gut, weil die meisten Sprachen dazu neigen, C als den kleinsten gemeinsamen Nenner zu verwenden. Solange Sie Ihre Schnittstellen über einen dünnen CAPI exportieren können Sie Schnittstellen für andere Sprachen erstellen.
Wir exportieren ein C (und nicht C++) api in der DLL, weil Funktionssignaturen plattformübergreifend viel standardisierter sind.
Vergessen Sie nicht, dass Sie in C# und Java mit Multibyte-String-Encoding umgehen müssen, also sollten Sie herausfinden, wie Sie Ihre Strings zu/von Ihrem C++ - Code transcodieren. Dazu gehört normalerweise, dass Sie über Gebietsschemata Bescheid wissen, oder Sie können UTF-8 kostengünstig unterstützen.