2017-05-18 18 views
0

WS-Discovery機能でDLLを作成したいと思います。 私のテンプレートはこのMicrosoftのサンプルプロジェクトです。 https://code.msdn.microsoft.com/windowsapps/WS-Discovery-SDK-Sample-8138b0d1/view/SourceCode 3つのプロジェクト(クライアント、共通、サービス)があります。 すべてをコンパイルして実行でき、うまく動作します。C#のアプリケーションで使用できるC++コンソールアプリケーションからdllを作成するには? LNK2019 Win32 DLL

私は(私は、HTTP & httpsの後にスペースを追加しました)これらのパラメータを使用してサーバーを実行します。 WSDiscoveryService.exe/Aのhttp://192.168.2.53/onvif/device_service /秒のhttps://www.onvif.org/ver10 /device/wsdl/devicemgmt.wsdl https://www.onvif.org/ver20/ptz/wsdl/ptz.wsdl https://www.onvif.org/ver10/media/wsdl/media.wsdl https:// www.onvif.org/ver10/events/wsdl/event.wsdl

これまではすべて問題ありません。

解決策ServiceDll(Win32プロジェクト、アプリケーションタイプDLL)に新しいプロジェクトを追加しました。CommonプロジェクトのCommon.hとCommon.cppとServiceプロジェクトのTargetService.hとTargetService.cppを追加しました。 8倍速LNK2019 2倍LNK2001 1X LNK1120

重大度コード説明プロジェクトファイルの行の抑制: は、それから私は今、私はこのDLLを構築しようと、私は11個のエラーが出ServiceDll.cpp

// ServiceDll.cpp : Defines the exported functions for the DLL application. 

#include "stdafx.h" 
#include <windows.h> 
#include <stdlib.h> 
#include <strsafe.h> 
#include <string.h> 
#include <stdio.h> 
#include <conio.h> 
#include <wsdapi.h> 
#include "Common.h" 
#include "TargetService.h" 

#if !defined(WS_DISCOVERY) 

CTargetService *service = NULL; 

// Exspose 5 methods to outside. (prototypes) 

// create service and start lissen for probe messages. 
// if return value is 1 service is created and active. 
// if return value is 0 something is wrong. 
extern "C" __declspec(dllexport) int __cdecl WSDiscoveryCreate(LPWSTR endpointReference,WSD_URI_LIST *scopes); 

// get Endpoint reference of service 
// if return string is 0 then service is not running. 
extern "C" __declspec(dllexport) LPCWSTR __cdecl WSDiscoveryGetEndpointReference(); 

// send hello message 
// if return value is 1 helo message was sended. 
// if return value is 0 something is wrong. 
extern "C" __declspec(dllexport) int __cdecl WSDiscoveryHello(); 

// send bye message, this don't stop the service. 
// if return value is 1 bye message was sended. 
// if return value is 0 something is wrong. 
extern "C" __declspec(dllexport) int __cdecl WSDiscoveryBye(); 

// stop service and dispose used objects 
// if return value is 1 service was disposed or service was not created in first place. 
// if return value is 0 something is wrong. 
extern "C" __declspec(dllexport) int __cdecl WSDiscoveryDispose(); 


// (inplementation) 
extern "C" __declspec(dllexport) int __cdecl WSDiscoveryCreate(LPWSTR endpointReference,WSD_URI_LIST *scopes) 
{ 
HRESULT hr = S_OK; 
hr = CreateTargetService(endpointReference, scopes, &service); 
if (hr == S_OK) 
{ 
    return 1; 
} 
else 
{ 
    return 0; 
} 
} 

extern "C" __declspec(dllexport) LPCWSTR __cdecl WSDiscoveryGetEndpointReference() 
{ 
LPCWSTR temp = L"0"; 
HRESULT hr = S_FALSE; 
if (NULL != service) 
{ 
    hr = service->GetEndpointReference(&temp); 
    if (hr == S_OK) 
    { 
     return temp; 
    } 
} 
return temp; 
} 

extern "C" __declspec(dllexport) int __cdecl WSDiscoveryHello() 
{ 
if (NULL != service) 
{ 
    HRESULT hr = service->SendHelloMessage(); 
    if (hr == S_OK) 
    { 
     return 1; 
    } 
} 
return 0; 
} 

extern "C" __declspec(dllexport) int __cdecl WSDiscoveryBye() 
{ 
if (NULL != service) 
{ 
    HRESULT hr = service->SendByeMessage(); 
    if (hr == S_OK) 
    { 
     return 1; 
    } 
} 
return 0; 
} 

extern "C" __declspec(dllexport) int __cdecl WSDiscoveryDispose() 
{ 
if (NULL != service) 
{ 
    HRESULT hr = service->Terminate(); 
    if (hr == S_OK) 
    { 
     if (NULL != service) 
     { 
      service->Release(); 
      service = NULL; 
     } 
     return 1; 
    } 
    else 
    { 
     return 0; 
    } 
} 
else 
{ 
    // service was not created. 
    return 1; 
} 
} 

#endif /* !defined(WS_DISCOVERY) */ 

にこのコードを追加します\テスト\ C++ \ ServiceDll \ Common.obj 1

:機能 "長い__cdecl GetWideStringHostName(wchar_t型* *)"(?GetWideStringHostName @@ YAJPAPA_W @ Z)ServiceDll Cで参照8 @状態 エラーLNK2019未解決の外部シンボル__imp__gethostname重大度コード説明プロジェクトファイルの行の抑制状態 エラーLNK2001未解決の外部シンボル_WSDAllocateLinkedMemory @ 8 ServiceDll C:\テスト\のC++ \ ServiceDll TargetService.obj \ 1

重大度コード説明プロジェクトファイルの行抑制状態 エラーLNK2019未解決の外部シンボル\テスト\ C++ \ ServiceDll \ TargetService.obj 1

重大度コード説明プロジェクトファイルの行の抑制:__imp__UuidCreate 4 @機能 "長い__cdecl _GenerateEndpointReference(wchar_t型* *)"(?_GenerateEndpointReference @@ YAJPAPA_W @ Z)ServiceDll Cで参照状態 エラーLNK1120未解決の外部ServiceDll C:\ test \ C++ \ Debug \ ServiceDll.dll 1

+0

小さくてシンプルに始め、そこから構築してください。詳細については、[mcve]を参照してください。 –

+0

もっとシンプルなのは? 1. Microsoftソリューションの例をダウンロードし、コンパイルします。 2. MSソリューション(Win32 DLL)に新しいプロジェクトを追加します。 3.提供されたペーストコードを入力し、コンパイルを押します。 5分以内にリンカーエラーを複製できます。 – user1513890

答えて

-1

リンクライブラリにWs2_32.lib;Wsdapi.lib;Rpcrt4.libを追加します。

関連する問題