0
点赞
收藏
分享

微信扫一扫

d的ldc混杂错误

​​​​​​dmd​​​没问题,​​ldc​​​的.
我有带声明的​​​.di​​​,及从它们生成​​存根​​​函数和​​全局指针​​的单独模块:

__gshared extern(C) static void* dpford_funcp_DMANGLE;
pragma(mangle, "DMANGLE")
void dpford_func_DMANGLE() {
asm{
naked;
jmp dpford_funcp_DMANGLE;
}
}

我非常不想用​​特征​​​生成​​函数体​​​.我试用​​ldc.attributes.naked​​​,但同样如此.
这是​​​生成函数​​的串片段.

mixin({
import std.array;
string result = q{
__gshared extern(C) static void* dpford_funcp_DMANGLE;
pragma(mangle, "DMANGLE")
void dpford_func_DMANGLE() {
asm{
naked;
jmp dpford_funcp_DMANGLE;
}
}
};
return result.replace("DMANGLE", n.mangleof);
}());

函数声明

//api.di
module api;
enum SorrelAPI;
@SorrelAPI
int testFunc(int, int);

​mixin​​​模板中,​​另一​​​模块从​​该模块​​​中读取更改后的​​函数名​​​.
好吧,你正在为所有​​​包装器​​​用​​void()​​​签名.如果不想用​​正确签名​​​(可从n继承),则要避免用​​正确类型的声明​​​和​​包装器模块​​​编译​​模块​​​到单个​​目标文件​​​,来避免​​LDC​​​检测到​​签名不匹配​​​.因此,如果有​​多个​​​只包含这些​​mixin​​​的​​包装器模块​​​,则单独​​编译​​​到它们自己的​​目标文件/静态库​​应可工作.


举报

相关推荐

0 条评论