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包装器模块,则单独编译到它们自己的目标文件/静态库应可工作.

posted @   zjh6  阅读(14)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示