У меня есть 2 проекта в VS 2012, пытающихся создать оболочку C ++ для Team Foundation Server API.
#pragma once
using namespace System;
using namespace System::Reflection;
using namespace System::Collections::ObjectModel;
using namespace Microsoft::TeamFoundation::Client;
using namespace Microsoft::TeamFoundation::Framework::Common;
using namespace Microsoft::TeamFoundation::Framework::Client;
namespace ManagedDll {
public ref class TFSAUth
{
public:
TFSAUth();
~ TFSAUth();
void AuthUser()
{
System::String ^x = gcnew String( "http://myhost:8080/tfs");
System::String ^u = gcnew String( "user");
System::String ^p = gcnew String( "Pass");
System::Net::NetworkCredential ^c = gcnew System::Net::NetworkCredential(u, p);
TeamFoundationServer ^something = gcnew TeamFoundationServer(x, c);
something->Authenticate();
System::String ^col = gcnew String (something->TfsTeamProjectCollection->Name);
Console::WriteLine(col);
}
private:
};
TFSAUth:: TFSAUth()
{
}
TFSAUth::~ TFSAUth()
{
}
}
__declspec(dllexport) void Auth()
{
ManagedDll::TFSAUth work;
work.AuthUser();
}
Это проект библиотеки, и у меня есть тестовое приложение, использующее эту библиотеку.
#include "stdafx.h"#include "conio.h"#include <iostream>
#include <windows.h>
#include "ManagedDll.h"
_declspec(dllexport) void Auth();
int _tmain()
{
Auth();
system("pause");
return 0;
}
Все некоторое время работал, открыл этот проект, чтобы посмотреть, смогу ли я получить что-то еще. Сегодня он не компилируется, что дает мне ошибки компоновщика.
TestApp.obj: ошибка LNK2019: неразрешенный внешний символ «void __cdecl
Auth (void) «(? Auth @@ YAXXZ), на который ссылается функция _wmain
Я не уверен, почему, поскольку ничего не изменилось. Но более того, мне интересно, правильно ли я поступаю при создании оболочки C ++ для TFS API.
Любая помощь / примеры / предложения высоко ценится, так как это моя первая попытка обертки.
В вашем родном проекте C ++ (Test Application) вы должны включить файл lib управляемого проекта C ++ (ManagedDll).
Экспортированная функция DLL в управляющей DLL C ++ обрабатывается так же, как и в собственных C ++ DLL, вы можете выполнить следующее: Lib-файлы как входные данные компоновщика чтобы это работало.
Кроме того, вы должны удалить
_declspec(dllexport) void Auth();
в тестовом приложении.