我有一个c#程序调用包含代码的c ++ dll来创建模型(Net类型)并使用该模型来评估图像。由于dll函数当前包含加载模型的代码,因此运行此函数所花费的时间太长,无法用于评估实时订阅源的任务。
我想只需要从dll调用创建一次模型,然后将指向模型的指针传递给evaluate函数,从而消除从文件加载模型的开销。
我试图创建一个传递void **的函数,在堆上创建一个模型并将传递的void **指向它。这将允许我将指针传递给dll中的其他函数,并从堆内存中创建一个模型对象。
我无法让这个工作,虽然在我看来它应该是可能的,但我不确定它是否可以。
有关如何解决此问题或如何修复我的代码的任何建议将不胜感激,谢谢。
尝试在“loadNet()”
读取或写入受保护的内存c ++ / dll code
void loadNet(void **np)
{
String modelFile = "graph.pb";
Net *net;
net = (Net *)malloc(sizeof(Net));
*net = readNetFromTensorflow(modelFile)
*np = &net;
}
extern "C"{
DLLEXPORT void loadNet(void **);
}
c#代码调用dll
[DllImport("Project5.dll")]
public static extern unsafe void loadNet(void **np);
static void Main(string[] args)
{
unsafe
{
void *np;
loadNet(&np);
Bitmap img = (Bitmap)Image.FromFile("2.png");
BitmapData bmpData = img.LockBits(new Rectangle(0,0,img.Width,
img.Height),ImageLockMode.ReadWrite,
img.PixelFormat);
Results results = evalImgGest2(bmpData.Scan0,&np);
img.UnlockBits(bmpData);
Console.WriteLine(results.five);
Console.WriteLine(results.fist);
Console.WriteLine(results.index);
}
}
net = (Net *)malloc(sizeof(Net)); // is causing error
Net *net = new Net(); // replacing with this removes error