Czytałem ten D Cookbook i blisko początku jest następujące zdanie:Czy DLL D może działać w SAS?
D jest binarnie kompatybilny z C, ale nie źródło kompatybilne.
SAS allows users to define and call C functions from within SAS. Ale zastanawiam się, czy byłoby to możliwe również z D?
Znalazłem odpowiedź Adama Ruppe'a, aby utworzyć bibliotekę DLL here, i próbowałem tego użyć, aby utworzyć przykład DLL z dokumentacji SAS; jednak za każdym razem, gdy go wezwam, biblioteka dll zostanie załadowana, a następnie SAS przechodzi do awarii (bez logu awarii, który mogę znaleźć).
może oznaczać, że funkcje są nieprawidłowe, ustawienie domyślne nie jest odpowiednie dla tego –
To, co powoduje awarię SAS, nie zdziwiłoby mnie; jednak mam bardzo ograniczone doświadczenie z bibliotekami DLL i zasadniczo nie ma ich w D. Wiem, że w SAS muszą używać konwencji wywoływania __stdcall Gz, ale nie jestem pewien, jak to zweryfikować. D. – charles
Awaria prawdopodobnie brakuje 'extern (Windows)' jak powiedział CyberShadow. Dla wyjaśnienia tego zdania, miałem na myśli, że D może wywoływać lub wywoływać funkcje wywoływalne z C, ale nie może bezpośrednio odczytać kodu źródłowego C. Teraz * część * kodu C również zostanie skompilowana jako D, a większość zrobi to samo, ale jest kilka ważnych szczegółów do sprawdzenia. 'extern' jest jednym z nich. Odpowiednie typy i układy są również ważne. Z 'int', które jest łatwe, C int i D int są takie same. Ale przekazywanie ciągów między literami C i D jest nieco trudniejsze, więc jeśli spróbujesz to zrobić, prawdopodobnie również się zawiesi. –