char*
gm to traktuje jako string
źle zrozumiałem.
gml sprawdza czy dałeś tam ty_real czy ty_string i wywołuje odpowiednią funkcję z dll'a
Po prostu wpisujesz ty_real bądź ty_string, w zależności jaki typ jest zwracany, tak jak przy definiowaniu zwykłych dll (external_define) w gm.
Obczaj zresztą skrypt ;p
@EDIT Tak wgl to sprawdzałeś czy działa w slapie ten dla GM'a?
Czyli działa? :)
@EDIT Skończyłem :D
Link: https://gmclan.org/up8194_3_DotNetSlapCrossover1_0.html
W środku binarki dla .NET 4 oraz 4.5, source oraz przykłady. Testowałem importowanie funkcji przez P/Invoke w c# bo już mnie denerwowało cpp ;p (czyli zarządzany program odwoływał się do mieszanej biblioteki która z kolei odwoływała się do dynamicznie ładowanego, zarządzanego dll)
Dodałem więcej typów do wykorzystania(kwestia dopisania paru linijek). Poniżej lista typów oraz ich odpowiedników w .NET.
Nie zapomniałem oczywiście o LPVOID. W .NET to System.IntPtr.
char* to System.String.(tego też nie ma w tej tabelce)
Tutaj taka lista co możesz zaimportować (wycinek z kodu):
//#########################
//AUTHOR OF DLL: Utermiko #
//#########################
#define EXPORT extern "C" __declspec(dllexport)
EXPORT int LoadDll(char* path);
EXPORT int CreateObject(int assemblyId, char* namespaceAndClass);
EXPORT int RemoveObject(int objectId);
EXPORT int ClearArguments();
EXPORT int AddStringArgument(char* value);//System.String
EXPORT int AddCharArgument(char value);//System.SByte
EXPORT int AddUCharArgument(unsigned char value);//System.Byte
EXPORT int AddDoubleArgument(double value);//System.Double
EXPORT int AddFloatArgument(float value);//System.Float
EXPORT int AddIntArgument(int value);//System.Int32
EXPORT int AddUIntArgument(unsigned int value);//System.UInt32
EXPORT int AddShortArgument(short value);//System.Int16
EXPORT int AddUShortArgument(unsigned short value);//System.UInt16
EXPORT int AddLongArgument(long value);//System.Int64
EXPORT int AddULongArgument(unsigned long value);//System.UInt64
EXPORT int AddLPVOIDArgument(LPVOID value);//System.IntPtr
EXPORT char* InvokeStringMethod(int objectId, char* methodName);//System.String
EXPORT char InvokeCharMethod(int objectId, char* methodName);//System.SByte
EXPORT unsigned char InvokeUCharMethod(int objectId, char* methodName);//System.Byte
EXPORT double InvokeDoubleMethod(int objectId, char* methodName);//System.Double
EXPORT float InvokeFloatMethod(int objectId, char* methodName);//System.Float
EXPORT int InvokeIntMethod(int objectId, char* methodName);//System.Int32
EXPORT unsigned int InvokeUIntMethod(int objectId, char* methodName);//System.UInt32
EXPORT short InvokeShortMethod(int objectId, char* methodName);//System.Int16
EXPORT unsigned short InvokeUShortMethod(int objectId, char* methodName);//System.UInt16
EXPORT long InvokeLongMethod(int objectId, char* methodName);//System.Int64
EXPORT unsigned long InvokeULongMethod(int objectId, char* methodName);//System.UInt64
EXPORT LPVOID InvokeLPVOIDMethod(int objectId, char* methodName);//System.IntPtr
@EDIT Nie zapomnij użyć "ClearArguments" przed dodawaniem argumentów do wywołania innej metody. Najczęściej na tym można się złapać :P
@EDIT2 Jeszcze jedno. Przy "LoadDll" trzeba podawać PEŁNĄ ścieżkę.
@EDIT3 Nie testowałem wszystkich funkcji Invoke... i Add... , ale powinny działać.