c# dll 导入入口点,带冒号/作用域
c# dll import entry point with colons / scope
希望从 vssapi.dll
、
导入 dll
查看 GetSnapshotDeviceName
函数和 DLL 导出查看器给我:
protected: long __cdecl CVssWriter::GetSnapshotDeviceName(unsigned short const * __ptr64,unsigned short const * __ptr64 * __ptr64)const __ptr64
protected: long __cdecl CVssJetWriter::GetSnapshotDeviceName(unsigned short const * __ptr64,unsigned short const * __ptr64 * __ptr64)const __ptr64
假设我想要第一个,我该如何声明dll导入,
例如:
[DllImport("vssapi.dll", EntryPoint = "CVssWriter::GetSnapshotDeviceName", CharSet = CharSet.Auto, SetLastError = true, ExactSpelling = true)]
private static extern uint GetSnapshotDeviceName(string wszOriginalVolume, out string ppwszSnapshotDevice);
[有或没有 ExactSpelling] 总是给我
Unable to find an entry point named
'CVssWriter::GetSnapshotDeviceName' in DLL 'vssapi.dll
错误。冒号的变化(删除等)和颠倒名称(作为装饰版本)也没有给我任何乐趣。
我知道它可以使用修饰名或序号工作,但我希望代码具有合理的可移植性(声明依赖于编译器,而且我从未见过任何表示序号在更新中保持不变的内容两者之一)。
是的,我已经知道这个 dll 不能移植到 Vista 之前的版本……我可以接受。
也听说过 AlphaVSS
- 但我需要的是使用航空母舰在湖上钓鱼( - 他们真的需要让它使用起来如此笨拙吗?)
这些是C++实例方法,也就是成员函数。因此,无法使用 p/invoke 导入它们。您尝试使用的 VSS API 可作为 C++ 类 或通过 COM 使用。
如果您需要的功能可通过 COM 接口获得,那么这将是您继续操作的最简单方法。否则,您将需要以一种或另一种方式包装 C++ 类。当然,最简单的方法是使用混合模式 C++/CLI 程序集。
不管怎样,p/invoke 帮不了你。
希望从 vssapi.dll
、
查看 GetSnapshotDeviceName
函数和 DLL 导出查看器给我:
protected: long __cdecl CVssWriter::GetSnapshotDeviceName(unsigned short const * __ptr64,unsigned short const * __ptr64 * __ptr64)const __ptr64
protected: long __cdecl CVssJetWriter::GetSnapshotDeviceName(unsigned short const * __ptr64,unsigned short const * __ptr64 * __ptr64)const __ptr64
假设我想要第一个,我该如何声明dll导入, 例如:
[DllImport("vssapi.dll", EntryPoint = "CVssWriter::GetSnapshotDeviceName", CharSet = CharSet.Auto, SetLastError = true, ExactSpelling = true)]
private static extern uint GetSnapshotDeviceName(string wszOriginalVolume, out string ppwszSnapshotDevice);
[有或没有 ExactSpelling] 总是给我
Unable to find an entry point named 'CVssWriter::GetSnapshotDeviceName' in DLL 'vssapi.dll
错误。冒号的变化(删除等)和颠倒名称(作为装饰版本)也没有给我任何乐趣。
我知道它可以使用修饰名或序号工作,但我希望代码具有合理的可移植性(声明依赖于编译器,而且我从未见过任何表示序号在更新中保持不变的内容两者之一)。
是的,我已经知道这个 dll 不能移植到 Vista 之前的版本……我可以接受。
也听说过 AlphaVSS
- 但我需要的是使用航空母舰在湖上钓鱼( - 他们真的需要让它使用起来如此笨拙吗?)
这些是C++实例方法,也就是成员函数。因此,无法使用 p/invoke 导入它们。您尝试使用的 VSS API 可作为 C++ 类 或通过 COM 使用。
如果您需要的功能可通过 COM 接口获得,那么这将是您继续操作的最简单方法。否则,您将需要以一种或另一种方式包装 C++ 类。当然,最简单的方法是使用混合模式 C++/CLI 程序集。
不管怎样,p/invoke 帮不了你。