我有 ac# 库,它提供了一些将数据上传到连接(android)设备的功能。dll 本身通过UnmangedExports导出以供 delphi 应用程序使用。
这是由 delphi 应用程序调用的函数:
[DllExport]
[return: MarshalAs(UnmanagedType.LPStr)]
public static string getDevices()
{
try
{
var devices = string.Empty;
var collection = new PortableDeviceCollection();
collection.Refresh();
foreach (var device in collection)
{
device.Connect();
if (devices != string.Empty)
{
devices += ";";
}
devices += device.FriendlyName;
device.Disconnect();
}
return devices;
}
catch (Exception e)
{
SomeClass.WriteErrorToLogFile(e);
return "ERROR";
}
}
这是 PortableDeviceCollection 类:
public class PortableDeviceCollection : Collection<PortableDevice>
{
private readonly PortableDeviceApiLib.PortableDeviceManagerClass _deviceManager;
public PortableDeviceCollection()
{
this._deviceManager = new PortableDeviceApiLib.PortableDeviceManagerClass();
}
public bool Refresh()
{
this._deviceManager.RefreshDeviceList();
// Determine how many WPD devices are connected
var deviceIds = new string[1];
uint count = 1;
this._deviceManager.GetDevices(null, ref count);
if (count > 0)
{
// Retrieve the device id for each connected device
deviceIds = new string[count];
this._deviceManager.GetDevices(deviceIds, ref count);
foreach (var deviceId in deviceIds)
{
Add(new PortableDevice(deviceId));
}
return true;
}
else
return false;
}
}
我可以使用 Visual Studio 创建 dll 并在 delphi 应用程序中使用它。当 delphi 应用程序调用该getDevices()
函数时,我在 PortableDeviceCollection 类的实例化时遇到错误:
未找到文件或程序集“Interop.PortableDeviceApiLib,版本 = 1.0.0.0,文化 = 中性,PublicKeyToken = null”或其依赖项。程序集由比当前加载的运行时更新且无法加载的运行时创建。
ProductXY.PortableDeviceCollection..ctor()
ProductXY.ProductXYMain.getDevices()
c# 项目的目标框架设置为.Net Framework 4
. 当我尝试编译项目时,使用任何较低版本都会出错:
无法解析主要引用“Interop.PortableDeviceApiLib”,因为它间接依赖于 .NET Framework 程序集“mscorlib,版本 = 4.0.0.0,文化 = 中性,PublicKeyToken = b77a5c561934e089”,它是更高的版本 4.0.0.0高于当前目标框架中的 2.0.0.0 版本。
请注意。我既没有写过 c# 库也没有写过 delphi 应用程序。两人合作多年。现在我必须向 c# 库添加一个功能。我没有在项目中添加任何代码。我只是尝试再次编译它并使用 dll。我唯一做的就是通过 NuGet Packetmanager 更新 RGiesecke.DLLExport.Metadata。没有更新我得到一个错误
“Microsoft.Build.Utilities.ToolLocationHelper 找不到 ildasm.exe”
我知道这个在 C# 中枚举 Windows 便携式设备的问题。但是在达到问题所涉及的代码之前,我的错误就被抛出了。我仍然尝试了该问题的解决方案,但是答案中描述的操作(在 dll 中解组合、查找和替换)已经完成(否则我的代码将无法编译)。
错误消息对我来说没有意义。Interop.PortableDeviceApiLib
是一个 COM-Lib,无法在不同的框架版本中下载。我想我在这里遗漏了一些东西。
谁能帮我?