为什么一个坏的指针被传递到我的原生导出方法从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# long
是64位宽,但c++ long
在Windows上是32位宽。pinvoke应该是:
[DllImport("Tomb.dll")]
public static extern uint InjectManualMap(uint pId, string dllPath);
请注意,我还删除了unsafe
指令和MarshalAs
属性,这是不需要的。