1

OSCと呼ばれるプロトコルを使用してMIDIデバイスを制御できるようにするためのサンプルプログラムを使用しています。

私が行ったことは、ここからSDKをダウンロードしたものです:http://mac.softpedia.com/get/Development/Libraries/oscpack.shtml

'examples'フォルダーには、'SimpleSend.cpp'というファイルが含まれています。このためのコードは次のとおりです。

#include "osc/OscOutboundPacketStream.h"
#include "ip/UdpSocket.h"


#define ADDRESS "127.0.0.1"
#define PORT 7000

#define OUTPUT_BUFFER_SIZE 1024

int main(int argc, char* argv[])
{
    UdpTransmitSocket transmitSocket( IpEndpointName( ADDRESS, PORT ) );

    char buffer[OUTPUT_BUFFER_SIZE];
    osc::OutboundPacketStream p( buffer, OUTPUT_BUFFER_SIZE );

    p << osc::BeginBundleImmediate
        << osc::BeginMessage( "/test1" ) 
        << true << 23 << (float)3.1415 << "hello" << osc::EndMessage
        << osc::BeginMessage( "/test2" ) 
        << true << 24 << (float)10.8 << "world" << osc::EndMessage
        << osc::EndBundle;

    transmitSocket.Send( p.Data(), p.Size() );
}

Visual C ++を開き、「osctemp」という新しい(CLRコンソールアプリケーション)プロジェクトを作成しました。'SimpleSend.cpp'ファイルからコードをコピーし、これをプロジェクト用に作成されたメインcppファイルに貼り付け、デフォルトのプロジェクトファイルから次のコード行を保持します。

#include "stdafx.h"

using namespace System;

次に、stdafx.hヘッダーファイルに移動すると、下部に次の行が含まれていることがわかります。

// TODO: reference additional headers your program requires here

...したがって、インクルードと定義をメインのcppファイルからここに素直に移動します。

また、プロジェクトにインクルードを追加する必要があることに気付きました。そのため、Windowsエクスプローラーでフォルダー「osc」と「ip」をプロジェクトフォルダーにコピーします。

実行すると、次のエラーが発生します。

1>------ Build started: Project: osctemp, Configuration: Debug Win32 ------

1>  stdafx.cpp

1>  AssemblyInfo.cpp

1>  osctemp.cpp

1>  Generating Code...

1>  .NETFramework,Version=v4.0.AssemblyAttributes.cpp

1>osctemp.obj : error LNK2028: unresolved token (0A00000A) "public: char const * __thiscall osc::OutboundPacketStream::Data(void)const " (?Data@OutboundPacketStream@osc@@$$FQBEPBDXZ) referenced in function "int __cdecl main(int,char * * const)" (?main@@$$HYAHHQAPAD@Z)

1>osctemp.obj : error LNK2028: unresolved token (0A00000B) "public: unsigned int __thiscall osc::OutboundPacketStream::Size(void)const " (?Size@OutboundPacketStream@osc@@$$FQBEIXZ) referenced in function "int __cdecl main(int,char * * const)" (?main@@$$HYAHHQAPAD@Z)

1>osctemp.obj : error LNK2028: unresolved token (0A00000C) "public: void __thiscall UdpSocket::Send(char const *,int)" (?Send@UdpSocket@@$$FQAEXPBDH@Z) referenced in function "int __cdecl main(int,char * * const)" (?main@@$$HYAHHQAPAD@Z)

...(And many more like this)...

1>D:\Temp\OSCTEMP\osctemp\Debug\osctemp.exe : fatal error LNK1120: 40 unresolved externals

私は何を逃しましたか?

4

2 に答える 2

1

問題の説明から、SDK ライブラリへのリンク方法について何も見つかりません。そうしましたか?

SDK ライブラリとリンクするには、1 つ以上の .lib ファイルが必要です。SDK が DLL として配布されている場合でも、ビルド時のリンクには lib ファイルが必要です。SDK のドキュメントを読み、リンクの依存関係に関するガイドラインを探す必要があります。

SDK ディストリビューションに lib ファイルが見つからない場合は、まず SDK をビルドしてライブラリを生成し、次にライブラリにリンクする必要がある可能性があります。別の方法として、SDK に既製の VS プロジェクトが付属している場合は、それをソリューションに追加して、それに依存する独自のプロジェクトを設定できます (つまり、VS は出力ライブラリを見つけてリンクする作業を行います)。

繰り返しになりますが、SDK が任意の派生標準である場合、必要に応じて SDK を自分で構築する方法に関するドキュメントが必要です。

幸運を。

于 2011-05-27T14:40:54.430 に答える