如题!

解决方案 »

  1.   

    引用DLL.不要忘记using System.Runtime.InteropServices;俺也刚用过.[DllImport("CSGPAPI_DLL.dll")]
    public static extern int CSGP_ReadConf(string filename);
    [DllImport("CSGPAPI_DLL.dll")]
    public static extern int ReadSrvReq(StringBuilder ctrlMsg, StringBuilder subCode, StringBuilder contentMsg, ref int msgLen,  int timeOut);
    DllImport("CSGPAPI_DLL.dll")]
    public static extern int SendSrvResp(StringBuilder ctrlMsg, StringBuilder contentMsg, int MsgLen);
      

  2.   

    如果是com,可以引用如果不是com,则只能使用dllimport
      

  3.   

    函数可以,声明 API dllimport
    方式但类 标准 C/C++ 的类不行如果是 托管的 VC.net 类直接饮用 dll 即可
    就和C# 引用自己的dll 一样
      

  4.   

    那如果是 标准 C/C++ 写成的DLL呢?
    C#是没法引用的,该怎么办呢?
      

  5.   

    看来是没辙了!对类的引用毕竟设计到了其它的东西,对于外部调用程序来说,它是未知的。
    郁闷,早知道写成com了。
    还有,谁能看出下面代码的错误吗?
    extern "C" int PASCAL EXPORT GetTcpInfo(PDWORD dwIStream,
     PDWORD dwOStream,
     PDWORD dwConnNum)
    {
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    // TCP 连接数
    MIB_TCPSTATS tcpstat;
    MIB_TCPTABLE tcptable;
    DWORD tcpTemp_size=0; long ret_value = -1;
    MIB_IPADDRTABLE ipAddress; CString str1 ;

    in_addr add; memset(&tcpstat,0,sizeof(tcpstat));
    memset(&tcptable,0,sizeof(tcptable));
    memset(&ipAddress,0,sizeof(ipAddress)); // Get ipAddress
    ret_value = GetIpAddrTable(&ipAddress,&tcpTemp_size,TRUE);
    if(ret_value != ERROR_INSUFFICIENT_BUFFER)
    return -1;
    ret_value = GetIpAddrTable(&ipAddress,&tcpTemp_size,TRUE);
    if(ret_value != NO_ERROR)
    return -1;
    int ipNumber = ipAddress.dwNumEntries;
    CPtrArray* ipArray = new CPtrArray();
    for(int i=0;i<ipNumber;i++)
    {
    add.S_un.S_addr = ipAddress.table[i].dwAddr;
    str1 = inet_ntoa(add);
    } tcpTemp_size = 0;
    // get tcp table list
    ret_value = GetTcpTable (&tcptable,&tcpTemp_size,TRUE);
    if(ret_value != ERROR_INSUFFICIENT_BUFFER)
    return -1; ret_value = GetTcpTable (&tcptable,&tcpTemp_size,TRUE);
    if(ret_value != NO_ERROR)
    return -1; int nEntires = tcptable.dwNumEntries;
    for(i=0;i<nEntires;i++)
    {
    add.S_un.S_addr = tcptable.table[i].dwLocalAddr;
    str1 = (LPCTSTR)inet_ntoa(add);
    if(str1.CompareNoCase("127.0.0.1") != 0 && str1.CompareNoCase("0.0.0.0") != 0)
    *dwConnNum ++;
    } // TCP 状态
        ret_value = GetTcpStatistics(&tcpstat);
    if(ret_value != NO_ERROR)
    return -1;
    *dwIStream = tcpstat.dwInSegs;
    *dwOStream = tcpstat.dwOutSegs;
    return 0;
    }
    地址被修改了。在c#调用的时候*dwIStream 赋值语句出现错误。
      

  6.   

    ret_value = GetTcpTable (&tcptable,&tcpTemp_size,TRUE);
    if(ret_value != NO_ERROR)
    return -1;
    在这里调用系统函数的时候,dwIStream的内存地址被修改了。
    有谁知道解决方案的吗?
      

  7.   

    问题我已经在你的另一个帖子帮你解决了。还有,对于C#引用VC dll的类基本是不可行的,最好作成标准的COM。