assembly Visual Studio调试工具无法从组件原始程式档建置DLL?

rqqzpn5f  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(142)

我目前正在C++ Package 器中使用masm来开发.dll,以便其他应用程序可以使用它,特别是Visual Studio 2022中的c#应用程序
然而,这种开发方式有一些很大的缺点。Visual Studio有各种各样的小问题,比如如果一个文件“包含”在asm源代码中,就可以正确地构建MASM。这样的文件也不能有断点。这意味着我不得不求助于一个大文件,这变得非常笨拙。
这就像微软已经放弃了对MASM的支持,除非有某种方法来构建一个允许调试的DLL?
或者,如果没有针对Visual Studio调试问题的简单修复方法,是否有更好的方法在Windows上开发x64.dll?

n3ipq98p

n3ipq98p1#

工作示例。我能够单步执行C#代码并进入汇编代码。基于汇编的DLL的目录是c:\xcadll。
xa.asm:

includelib      msvcrtd
        includelib      oldnames        ;optional
        .data
        .data?
        .code
        public  DllMain
DllMain proc                            ;return true
        mov     rax, 1
        ret     0
DllMain endp
        include xb.asm
        end

xb.asm:

public  Example
Example proc                            ;[rcx] = 0123456789abcdefh
        mov     rax, 0123456789abcdefh
        mov     [rcx],rax
        ret     0
Example endp
        end

Program.cs -用于调用dll的调试版本:

using System;
using System.Runtime.InteropServices;
namespace Program
{
    class Program
    {
    [DllImport("c:\\xcadll\\x64\\debug\\xcadll.dll")]
    static extern void Example(ulong[] data);

        static void Main(string[] args)
        {
            ulong[] data = new ulong[4] {0,0,0,0};
            Console.WriteLine("{0:X16}", data[0]);
            Example(data);
            Console.WriteLine("{0:X16}", data[0]);
            return;
        }
    }
}

DLL生成的项目设置:
为程序集(或C或C++)代码创建一个.dll项目:

project properties: Debug | x64

xa.asm的属性:

General / Excluded From Build: No
Custom Build Tool / Command Line: ml64 /c /Zi /Fo$(OutDir)\xa.obj xa.asm
Custom Build Tool / Outputs: $(OutDir)\xa.obj

C#生成的项目设置:
创建C#项目

project properties: Debug | x64

如上面的示例代码所示,C#程序需要导入DLL的调试版本。

相关问题