我正在使用一个示例程序,该程序应该允许使用名为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&gt; ------构建开始:项目:osctemp,配置:调试Win32 ------
1&GT; stdafx.cpp
1&GT; AssemblyInfo.cpp
1&GT; osctemp.cpp
1&GT;生成代码......
1&GT; .NETFramework,版本= v4.0.AssemblyAttributes.cpp
1&GT; osctemp.obj:(?数据@ OutboundPacketStream @ @@ OSC $$ FQBEPBDXZ)错误LNK2028::无法解析令牌(0A00000A) “公共字符常量* __thiscall OSC :: OutboundPacketStream ::数据(无效)常量” 引用在函数“int __cdecl main(int,char * * const)”(?main @@ $$ HYAHHQAPAD @ Z)
1&GT; osctemp.obj:错误LNK2028:无法解析的令牌(0A00000B) “公开:无符号整型__thiscall OSC :: OutboundPacketStream ::尺寸(无效)常量” 中引用(尺码@ OutboundPacketStream @ @@ OSC $$ FQBEIXZ?) function“int __cdecl main(int,char * * const)”(?main @@ $$ HYAHHQAPAD @ Z)
1&GT; osctemp.obj:(吗?发送@ @@ UdpSocket $$ FQAEXPBDH @ Z)错误LNK2028::无法解析令牌(0A00000C) “公共无效__thiscall UdpSocket ::发送(字符常量*,INT)” 中引用的功能“int __cdecl main(int,char * * const)”(?main @@ $$ HYAHHQAPAD @ Z)
...(还有更多像这样的人)......
1&GT; d:\ TEMP \ OSCTEMP \ osctemp \调试\ osctemp.exe:致命错误LNK1120:40层解析的外部
我错过了什么?
答案 0 :(得分:1)
从您的问题描述中我找不到任何关于如何链接到SDK库的信息。你这样做了吗?
要与SDK库链接,您需要一个或多个.lib文件。即使SDK作为DLL分发,您也需要一个用于构建时链接的lib文件。您应该阅读SDK文档并查找有关链接依赖性的指南。
如果您似乎无法在SDK发行版中找到任何lib文件,那么您很可能需要首先构建SDK以生成库然后链接到它。或者,如果SDK带有一个准备好的VS项目,您可以将它添加到您的解决方案中并设置您自己的项目以依赖它(即VS执行查找输出库并与其链接的工作)。
同样,如果SDK具有任何下降标准,那么应该有关于自己构建SDK的文档(如果有必要)。
祝你好运。答案 1 :(得分:0)
你要么没有拉入正确的库,要么你的原型没有根据实际的内容正确定义库函数。