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)