2016-05-31 58 views
0

我有一個圖書館與visual C++ 2015(vc140)編譯; 我有一個客戶端應用程序在c#目標.net框架4.6.1。P /調用與vc140編譯器休息

客戶端應用程序無法調用(P/Invoke)從庫導出的任何函數(獲取「找不到dll」異常);但是,當我將編譯器更改爲vc120(visual C++ 2013)時,一切正常。

這是一個設置問題?

+0

看起來像DLL只是位於客戶端應用程序所期望的位置的不同位置。 – Cameron

+0

根據編譯器選項(x86,Debug,Release),dll需要位於bin的正確子文件夾中。當您向項目添加「Existing Item」並選擇可執行文件(.exe,.dll,..)時,編譯器會自動將源文件夾中的可執行文件複製到正確的bin文件夾中。如果手動將可執行文件放入bin文件夾(取決於c#的版本),可能會出現問題。一些版本有一個重建全部選項,將刪除bin中的所有文件。唯一一次,我發現你需要手動將dll放入bin文件夾中的是舊的dll,而不是設計用於windows的工作 – jdweng

+0

我試圖使用完整路徑P/Invoke定義但仍然沒有幫助。我已經驗證了架構匹配(客戶端和服務器設置均爲x64)。同樣,它似乎與vc140編譯器有關,因爲它編譯時始終可以使用vc120。 – sqexpress

回答

0

這似乎與C++ AMP庫中使用的d3d dll有關(這很奇怪)。將引用添加到dll之後,問題就解決了。