opnet和c程序之间的连接

时间:2015-10-08 14:32:00

标签: c

我写这个项目但是有一些错误

package javaapplication2;
public class Fun {
public static void main(String args[]) {
    int var1 = 3;
    int var2 = 2;
    int var3 = var1 & var2;
    System.out.println(var3);
   }
}

*这个程序有很多问题,虽然这段代码没有任何错误,因为我从书中复制了它。我尝试将opnet与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, 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;
}

2 个答案:

答案 0 :(得分:0)

您的源文件是.cpp,但您正在编写C代码。将文件名更改为test_1.c

答案 1 :(得分:0)

您为其参数声明了notification_callback以下类型:

(void *, double, void *)

在Internet上查找esnet.h for opnet(我发现版本10.0.A,但可能没有改变),Esa_Interface_Callback_Register的参数应为:

(void *, double, va_list)

您可以以类似的方式使用您的函数,但是您应该使用va_list声明它,并且如果您知道它是您将获得的唯一参数,则取第一个参数。

而且,正如KevinDTimm回答的那样,我认为如果你不使用C ++,最好避免使用C ++,而只使用普通的C.