non-pods über DLL-Grenzen herumreichen
-
Was für ein Zufall
-
@pi: Warum schreibst Du überhaupt extern "C" hin?
-
Ja, MSVC hat recht.
theta schrieb:
@pi: Warum schreibst Du überhaupt extern "C" hin?
Sehr gute Frage
-
Damit die Funktion gefunden wird, wenn ich sie laden möchte.
-
PI, was ist "world::chunk" denn für ein Typ? Wenn es eine Klasse ist, dann kann die natürlich von C aus nicht benutzt werden...
-
Ich rufe die Funktion über C++ auf... Daher dürfte es da kein Problem geben.
-
http://stackoverflow.com/questions/2505385/classes-and-static-variables-in-shared-libraries/2505528#2505528
http://eli.thegreenplace.net/2011/09/16/exporting-c-classes-from-a-dll/
http://www.codeproject.com/Articles/28969/HowTo-Export-C-classes-from-a-DLL
-
MSDN sagt: http://msdn.microsoft.com/en-us/library/1e02627y%28v=vs.71%29.aspx
'identifier1' has C-linkage specified, but returns UDT 'identifier2' which is incompatible with C
A function or pointer to function has a UDT (user-defined type, which is a class, structure, enum, union, or __value type) as return type and extern "C" linkage. This is legal if:
All calls to this function occur from C++.
The definition of the function is in C++.Damit kann ich das Problem lösen durch:
#pragma warning(disable: 4190)
-
314159265358979 schrieb:
Damit die Funktion gefunden wird, wenn ich sie laden möchte.
Dafür hast du doch dllexport!?
-
Das macht sie nur "public", aber durch extern "C" wird der Funktinsname nicht gemangelt.
-
Aber die Funktion returned einen Typ der in einem Namespace liegt!? In dem Moment ist C doch schon gestorben!?
-
Der Rückgabetyp ist dann aber nicht im exportierten Funktionsnamen enthalten...
-
N3242 schrieb:
Linkage from C++ to objects defined in other languages and to objects defined in C++ from other languages is implementation-defined and language-dependent.
-
Ich benutze die Lib aber nur in C++.
-
-
Hab ich doch gesagt: Damit ich die Funktion beim Namen finde.
-
Und was genau bringt dir das, wenn doch sowieso schon alles implementation-defined ist?
-
Versteh ich nicht. Irgendwie muss ich die Funktion ja finden, um sie benutzen zu können?
-
dllimport?
-
Ich glaube du verstehst nicht... Die Funktionen liegen in einer DLL. Nicht alle Funktionen in der DLL müssen vorhanden sein, damit die DLL mit dem Programm zusammenarbeitet. Die Funktion destruct() ist z.B. optional und wird nur aufgerufen, wenn vorhanden.