为什么一个坏的指针被传递到我的原生导出方法从c#

本文关键字:原生 我的 方法 一个 指针 为什么 | 更新日期: 2023-09-27 18:16:30

这是我的c#代码:

    [DllImport("Tomb.dll")]
    public static extern unsafe uint InjectManualMap(ulong pId, [MarshalAs(UnmanagedType.LPCStr)]string dllPath);

,不管什么原因,当我试图使用我的c++代码:

extern "C" DllExport unsigned int StdCall InjectManualMap(unsigned long pid, const char* dllPath) {
     ManualMapInjector* mmp = new ManualMapInjector;
     std::string dll(dllPath);
     unsigned int kk = mmp->Inject(pid, dll);
     delete mmp;
     return kk;
}

const char* dllPath总是一个坏指针(0x000000000)。我不确定这里发生了什么,因为所有其他解决方案都指向使用StringBuilder(对其进行了测试,做了同样的事情),或者使用MarshalAs,这是我发布的当前代码所做的。

为什么一个坏的指针被传递到我的原生导出方法从c#

问题是c# long是64位宽,但c++ long在Windows上是32位宽。pinvoke应该是:

[DllImport("Tomb.dll")]
public static extern uint InjectManualMap(uint pId, string dllPath);

请注意,我还删除了unsafe指令和MarshalAs属性,这是不需要的。