opnet与c程序的连接
我写这个项目,但有一些错误opnet与c程序的连接,c,C,我写这个项目,但有一些错误 #include "stdafx.h" #include "C:\OPNET\14.5.A\sys\include\esa.h" #include <stdio.h> #include <string.h> #include <stdlib.h> int total_pk_num = 0; int total_size = 0; static void notification_callback(void *state, doubl
#include "stdafx.h"
#include "C:\OPNET\14.5.A\sys\include\esa.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int total_pk_num = 0;
int total_size = 0;
static void notification_callback(void *state, double time, void *value);
int main(int argc, char **argv)
{
EsaT_State_Handle esa_handle;
int evt_num;
double ret_time;
EsaT_Interface *interfaces;
EsaT_Interface inf_size;
EsaT_Interface inf_desc;
int num;
int status;
int i = 0;
char desc[256];
Esa_Main(argc, argv, ESAC_OPTS_NONE);
Esa_Init(argc, argv, ESAC_OPTS_NONE, &esa_handle);
Esa_Load(esa_handle, ESAC_OPTS_NONE);
Esa_Interface_Group_Get(esa_handle, &interfaces, &num);
inf_size = interfaces[0];
inf_desc = interfaces[1];
Esa_Interface_Callback_Register(esa_handle, &status, inf_size, notification_callback, 0, 0);
while(1)
{
printf("External program\n");
Esa_Execute_Until(esa_handle, &status, 10*++i,
ESAC_UNTIL_INCLUSIVE, &ret_time, &evt_num);
if(status == ESAC_STATUS_TERMINATION)
{
printf("Simulation finished\n");
break;
}
Esa_Interface_Value_Get(esa_handle, &status, inf_desc, &desc);
printf("%s\n\n\n", desc);
sprintf(desc, "No. of packets: %d - time: %f (set in external program)",
total_pk_num, ret_time);
Esa_Interface_Value_Set(
esa_handle, &status, inf_desc, ESAC_NOTIFY_IMMEDIATELY, &desc);
}
return 0;
}
void notification_callback(void *state, double time, void *value)
{
printf("Total packet number: %d, total size: %d bits\n",
++total_pk_num, total_size += *(int *)value);
return;
}
您的源文件是.cpp,但您正在编写C代码。将文件名更改为test_1.c您声明的通知_回调的参数类型如下:
(void *, double, void *)
在Internet上查找opnet的esa.h时,我找到了10.0.A版,但可能没有更改,esa_接口_回调_寄存器的参数应为:
(void *, double, va_list)
您可以以类似的方式使用您的函数,但是您应该使用va_list声明它,如果您知道第一个参数是您将要获得的唯一参数,则使用第一个参数
<> P>,而且,正如KvEddimm所回答的,我认为最好避免C++,如果你不使用它,只需用C.< /P>工作,你注意到错误消息来自库头,并提到C++吗?还有:注意:C++不支持缺省int,表明您没有正确地声明标题,也就是说,具有对未定义函数的正向引用。我检查了不止一本书中的标题。我认为路径上存在错误,因此请检查此文件:@AhmedSalem-c:\users\ahmed\documents\visual studio 2010\projects\test\u 1\test\u 1.cpp37:错误C2664:……感谢您的努力,但请检查visual studio和opnet的此路径:要运行协同仿真,请输入以下代码:CL/c cosim\u external\u code1.c/IC:\opnet\14.5.A\sys\include”/IC:\Visual8\VC\PlatformSDK\include/D\u X86_
(void *, double, va_list)