D DLL能在SAS中工作吗?

D DLL能在SAS中工作吗?,dll,sas,d,Dll,Sas,D,我一直在读这篇文章,开头有一句话: D与C是二进制兼容的,但与源代码不兼容 。但我想知道,从d也可以这样做吗 我找到了Adam Ruppe创建DLL的答案,并尝试使用它从SAS文档创建DLL示例;但是,每当我去调用它时,就会加载dll,然后SAS就会崩溃(我找不到任何崩溃日志)。是的,您可以在D中编写dll,使用或实现C API 您必须确保函数签名和调用约定匹配。在您链接的页面中,调用约定指示为stdcall,因此您的D函数需要使用extern(Windows)或extern(System)进行

我一直在读这篇文章,开头有一句话:

D与C是二进制兼容的,但与源代码不兼容

。但我想知道,从d也可以这样做吗


我找到了Adam Ruppe创建DLL的答案,并尝试使用它从SAS文档创建DLL示例;但是,每当我去调用它时,就会加载dll,然后SAS就会崩溃(我找不到任何崩溃日志)。

是的,您可以在D中编写dll,使用或实现C API


您必须确保函数签名和调用约定匹配。在您链接的页面中,调用约定指示为
stdcall
,因此您的D函数需要使用
extern(Windows)
extern(System)

进行注释,可能是您声明了错误的函数,默认值不适用于此,导致SAS崩溃不会让我感到意外;然而,我对DLL的经验非常有限,在D中基本上没有。我知道在SAS中,他们必须使用u stdcall Gz调用约定,但我不确定如何验证这是在D中完成的。崩溃可能缺少外部(Windows)
,就像CyberShadow所说的那样。不过为了澄清这句话,我的意思是D可以调用或使函数可以从C调用,但它不能直接读取C源代码。现在,很多C代码也将编译为D,并且大部分都会做同样的事情,但是有一些重要的细节需要检查<代码>外部就是其中之一。匹配类型和布局也很重要。对于
int
这很简单,C int和D int是相同的。但是在C和D之间传递字符串有点棘手,因此如果您尝试这样做,它可能也会崩溃。@AdamD.Ruppe:谢谢您的澄清,也谢谢您的书:)谢谢!在验证这个答案后,我发现extern解决了这个问题。