我有一個項目,我必須連接到一個基於C的庫,並且我無法使用DLLImport從C#獲取函數。我必須使用基於C++/CLI的項目才能使用這些函數。 (更多的故事,但不重要)。Visual C++/CLI - CLR類 - LNK2020錯誤 - 如何解決?
我在10年前學習過C++,所以請原諒我,如果這看起來很天真。
去年我購買了一些關於C++/CLI實現的書籍,並且掌握了一些涉及的內容 - 我只是爲這個項目挖掘了這些書籍。 (我一直是程序員很長一段時間)。
我認爲我最好開始一個小項目示例項目,以熟悉將涉及的內容,確保可以編譯等。我使用Visual Studio 2008 SP1開始了一個項目; Visual C++> CLR>類庫。在項目中 - 我想從DLL中使用託管和本地。所以使用/ clr開關。 我在實際代碼中使用了其他名稱;但是這非常非常接近。 (沒有其他文件或功能,在這一點上)
頁眉:
//myWrapper.h
#pragma once
using namespace System;
namespace myWrapper {
public ref class myWrappedService {
myWrappedService();
bool Connected(String ^user,String ^password,String ^domain);
}
};
而且實現了這一點。
//myWrapper.cpp
//This is the main DLL file
#include "stdafx.h"
#include "myWrapper.h"
using namespace System;
public ref class myWrappedService
{
public:
myWrappedService() {}
bool Connected(String ^user,String ^password,String ^domain)
{
//just a simple result to start - no real functionality
bool result = false;
return result;
}
};
這是代碼 - 編譯但獲取鏈接器錯誤。
錯誤LNK2020:無法解析的令牌(06000002)myWrapper.myWrappedService ::連接
致命錯誤LNK1120:1未解析的外部。
這看起來很簡單 - 我可能會想到C#方法。我期望這很簡單 - 但我不熟悉CLI方法應該看到的內容。 (我花了幾個小時尋找答案,並最終覺得我需要發佈一個問題,可能會得到答案)。
我試過你的方法 - 連接線抱怨錯誤3149:'System :: String'不能在沒有頂級'^'的情況下使用此類型。我還需要一個返回值來說我連接 - 如果你可以修改你的例子 - 可能會起作用。 – Wolfledge 2011-03-09 01:05:27
我在發佈之前驗證了此代碼已編譯並構建到工作集中。 Connect()的String參數在代碼片段中顯然有一個可見的^,請驗證它的副本。我想你可以弄清楚如何自己改變方法的返回類型。 – 2011-03-09 01:09:02
我的壞 - 錯字 - 並使用我編譯的返回類型。當我用反射器打開DLL時,方法就在那裏。謝謝。 – Wolfledge 2011-03-09 12:44:57