簡體   English   中英

如何為 static 庫創建 C++ 或 C++/CLI 包裝器以在 C# 中使用

[英]How to create a C++ or C++/CLI wrapper for a static lib to use in C#

我只有一個 lib 文件及其 header 文件(靜態庫?)我想在 C# 中使用它。 通過谷歌搜索,我得出結論,我需要編寫一個 C# 能夠使用的包裝器 dll。

我已經嘗試在 C++ 和 C++/CLI 中寫這個,但是當我運行我的程序時,我得到一個錯誤,指出

無法加載 DLL 'foo.dll':找不到指定的模塊。 (來自 HRESULT 的異常:0x8007007E)

我已經使用了依賴項檢查器並且我的依賴項很好,所以我假設我的 dll 設置不正確。

我只是想使用庫中的函數而不是類。

這是我的cs文件的示例

using System;
using System.Runtime.InteropServices;
using System.Text;
public class FooWrapper
{
[DllImport("FooWrapper.dll", CallingConvention = CallingConvention.Cdecl)]
    public static extern short DoSomething(ushort var);
}

// More functions like the one above

我已通過進入 VS 並執行解決方案資源管理器 > 添加 > 現有項目 >我的 dll 所在的目錄> FooWrapper.Z06416233FE5EC4C5933122E4AB24 將 FooWrapper.dll 添加到我的項目中

對於我的 DLL,我剛剛創建了一個新的 DLL C++ 項目,添加了一個名為 ZA2F2ED4F8EBC2CBB614C21A29DC4 的項目。 這導致了一個項目

Project 
|
-Refrences
|
-External Dependencies
|
-Header Files
-- FooWrapper.h
-- framework.h
-- pch.h
| 
-Resource Files
|
- Source Files
--FooWrapper.cpp
--dllmain.cpp
--pch.cpp

FooWrapper.h 看起來像這樣

#pragma once

#ifndef FOOWRAPPER_H
#define FOOWRAPPER_H

#include <string>
#include "Foolib.h" // header file that comes with lib file i originally had

using namespace std;

#ifdef __cplusplus
extern "C" {
#endif

#ifdef FOOWRAPPER_EXPORTS
#define FOOWRAPPER_API __declspec(dllexport)
#else
#define FOOWRAPPER_API __declspec(dllimport)
#endif


FOOWRAPPER_API I16 DoSomething(const I16 var) // I16 is defined (typedef) as a short 

#ifdef __cplusplus
}
#endif
#endif


我還通過在 Properties>C/C++> Additional Include Directories 下添加包含目錄來鏈接 lib 和 header

和 Linker > 其他庫目錄 > *FooLib.lib 所在的目錄 *

和 Linker > 輸入 > 附加依賴 > *FooLib.lib 所在的目錄 * > FooLib.lib

最后,當我調用 DoSomething 時,代碼停止並給我 HRESULT 的異常:0x8007007E 錯誤消息。

如果我跳過了一步,有人可以告訴我嗎? 還是我應該使用 C++/CLI 創建庫? 如果是這樣,我可以再試一次。 或者如果沒有看到 FooLib.lib 代碼的實現,這是不可能的嗎?

castro評論解決了這個問題:

嘗試將 C++ 項目創建為 CLR 項目。 只要您遵循規則(僅在 cpp 中包含本機代碼),它就應該像添加您的項目作為對 C# 項目的引用一樣簡單。 從 memory 開始,所以我不能肯定,但這可能會幫助您入門: docs.microsoft.com/en-us/cpp/dotnet/...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM