首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >opnet与c程序的连接

opnet与c程序的连接
EN

Stack Overflow用户
提问于 2015-10-08 14:32:00
回答 2查看 317关注 0票数 0

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

代码语言:javascript
复制
#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;
}

*这个程序有很多问题,尽管这段代码没有任何错误,因为我从书本上复制它。我试图将opnet与C程序连接--这个错误出现了*

代码语言:javascript
复制
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winnt.h(6361): error C2146: syntax error : missing ';' before identifier 'ContextRecord'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winnt.h(6361): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winnt.h(6361): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winnt.h(12983): error C2065: 'PCONTEXT' : undeclared identifier
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winnt.h(12984): error C2146: syntax error : missing ')' before identifier 'ContextRecord'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winnt.h(12984): warning C4229: anachronism used : modifiers on data are ignored
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winnt.h(12984): error C2182: 'RtlCaptureContext' : illegal use of type 'void'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winnt.h(12984): error C2491: 'RtlCaptureContext' : definition of dllimport data not allowed
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winnt.h(12984): error C2059: syntax error : ')'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winnt.h(13372): error C2143: syntax error : missing ';' before '__stdcall'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winnt.h(13372): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winnt.h(13376): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winnt.h(14982): error C3861: '__readfsdword': identifier not found
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winbase.h(1048): error C2146: syntax error : missing ';' before identifier 'LPCONTEXT'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winbase.h(1048): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winbase.h(1048): error C2378: 'PCONTEXT' : redefinition; symbol cannot be overloaded with a typedef
1>          c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winnt.h(13372) : see declaration of 'PCONTEXT'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winbase.h(1048): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winbase.h(3610): error C2061: syntax error : identifier 'PCONTEXT'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winbase.h(4449): error C2061: syntax error : identifier 'LPCONTEXT'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winbase.h(4457): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winbase.h(4457): error C2143: syntax error : missing ',' before '*'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winbase.h(15112): error C2143: syntax error : missing ';' before '__stdcall'
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winbase.h(15112): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winbase.h(15116): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\ahmed\documents\visual studio 2010\projects\test_1\test_1\test_1.cpp(37): error C2664: 'Esa_Interface_Callback_Register' : cannot convert parameter 4 from 'void (__cdecl *)(void *,double,void *)' to 'EsaT_Interface_Callback_Proc'
1>          None of the functions with this name in scope match the target type
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:01.70
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
EN

回答 2

Stack Overflow用户

发布于 2015-10-08 14:42:20

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

票数 0
EN

Stack Overflow用户

发布于 2015-10-08 14:56:56

您使用以下类型声明了notification_callback的参数:

代码语言:javascript
复制
(void *, double, void *)

在Internet中查找ESS.h用于opnet (我已经找到10.0.A版,但可能没有改变),Esa_Interface_Callback_Register的参数应该是:

代码语言:javascript
复制
(void *, double, va_list)

您可以以类似的方式使用您的函数,但是您应该使用va_list来声明它,如果您知道它是您要得到的唯一参数,那么应该使用第一个参数。

而且,正如KevinDTimm所回答的,如果您没有将C++用于任何事情,并且只使用普通C,我认为最好避免使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33018755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档