//---------------------------------------------------------------------------
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include "DefStruct.h"
//---------------------------------------------------------------------------
typedef void __stdcall (*FGetShareData)(
    struct PriceData *stPrice, struct TimesData *stTimes,
    struct PowerData *stPower, struct WarnData *stWarn,
    struct ICData *stIC, struct ItData *stIt);typedef void __stdcall (*FSetShareData)(
    struct PriceData *stPrice, struct TimesData *stTimes,
    struct PowerData *stPower, struct WarnData *stWarn,
    struct ICData *stIC, struct ItData *stIt);
    
//---------------------------------------------------------------------------
//初始化共享内存数据结构
void InitShareData(TShareData *sharedata)
{
  memset(&sharedata->stPriceData, 0, sizeof(struct PriceData));
  memset(&sharedata->stTimesData, 0, sizeof(struct TimesData));
  memset(&sharedata->stPowerData, 0, sizeof(struct PowerData));
  memset(&sharedata->stWarnData, 0, sizeof(struct WarnData));
  memset(&sharedata->stICData, 0, sizeof(struct ICData));
  memset(&sharedata->stItData, 0, sizeof(struct ItData));
}
    
//---------------------------------------------------------------------------
//取共享内存数据
long GetSharedData(TShareData *sharedata)
{
  HANDLE hdll = LoadLibrary("SpvsData.dll");
  if(hdll == NULL)
    return -1;  FGetShareData GetShareData = (FGetShareData)GetProcAddress(hdll, "GetIcData");
  if(GetShareData == NULL)
    return -1;  GetShareData(&sharedata->stPriceData, &sharedata->stTimesData, &sharedata->stPowerData,
    &sharedata->stWarnData, &sharedata->stICData, &sharedata->stItData);
  return 0;
}
//---------------------------------------------------------------------------
//置共享内存数据
long SetSharedData(TShareData *sharedata)
{
  HANDLE hdll = LoadLibrary("SpvsData.dll");
  if(hdll == NULL)
    return -1;  FSetShareData SetShareData = (FGetShareData)GetProcAddress(hdll, "SetIcData");
  if(SetShareData == NULL)
    return -1;  SetShareData(&sharedata->stPriceData, &sharedata->stTimesData, &sharedata->stPowerData,
    &sharedata->stWarnData, &sharedata->stICData, &sharedata->stItData);
  return 0;
}//---------------------------------------------------------------------------long __stdcall WriteCard(HANDLE hHandle, long iPort,
                          long iBps, char *sWPassword,
                          long IsShow)
{
  TShareData sharedata;
  long rv;
  
  InitShareData(&sharedata);
  //取共享内存数据
  rv = GetSharedData(&sharedata);
  if(rv != 0) return rv;
  
  switch(sharedata.stICData.CardID)
  {
    //
    case 2:
      //      break;    //
    case 3:
      break;    //    case 4:
      break;    //555        case 5:
      break;
    default:
      ;
  }
  
  return rv;
}
//---------------------------------------------------------------------------long __stdcall ReadCard(HANDLE hHandle, long iPort,
                        long iBps, char *sRPassword,
                        long IsShow)
{
  TShareData sharedata;
  long rv;  InitShareData(&sharedata);
  //读数据
  //置共享内存数据
  rv = SetSharedData(&sharedata);
  return rv;
}
//---------------------------------------------------------------------------
long __stdcall WriteAreaNo(HANDLE hHandle, long iPort,
                            long iBps ,char *sWPassword)
{
  TShareData sharedata;
  long rv;  InitShareData(&sharedata);
  //取共享内存数据
  rv = GetSharedData(&sharedata);
  if(rv != 0) return rv;  return 0;
}//---------------------------------------------------------------------------
long __stdcall ReadAreaNo(HANDLE hHandle ,long iPort ,
                                    long iBps ,char *sRPassword,
                                    char *MeterTypeID )
{
  TShareData sharedata;
  long rv;
  
  InitShareData(&sharedata);
  //读数据  //置共享内存数据
  rv = SetSharedData(&sharedata);
  return rv;
}//---------------------------------------------------------------------------这段VC的处理共享内存代码的可以用VB实现吗? 先谢了!

解决方案 »

  1.   

    用VB可以实现共享内存的 是一系列MAP API函数
      

  2.   

    VB可以实现共享内存的 是一系列MAP API函数
      

  3.   

    觉得只是API翻译过来就可以了。但我觉得还是应该从任务出发,以完成相同的任务为目的。不要刻意的翻译代码。VB通常用更抽象的方法等效的来完成VC一样的功能,并不是代码的一句对一句的翻译。
      

  4.   

    谢谢楼上3位 我并不是要无聊的把代码一句一句翻译出来玩 是客户给的例子是VC的 然后上次给另一个客户是保留我们系统的现有VB代码然后在外面加DELPHI封装做的 当时用DELPHI做封装的原因有2个:a.当时我没找到用VB制作标准DLL的工具和方法;  b.当时不知道怎么用VB来实现读写共享内存;   现在第一个问题找到了MysticBoy的CoderHelper工具应该可以基本解决 所以想到如果第二个问题也能用VB实现的话我就不用做VB和DELPHI相互解释的工作了 也就不需要用DELPHI做封装来处理共享内存和生成标准DLL了 这样就可以节省很多时间哦 ^_^ 不知道行不行哦 呵呵
      

  5.   

    <-------- UP --------->
      

  6.   

    有没有人能帮下忙啊 
    譬如 
    //取共享内存数据
    long GetSharedData(TShareData *sharedata)
    {
      HANDLE hdll = LoadLibrary("SpvsData.dll");
      if(hdll == NULL)
        return -1;  FGetShareData GetShareData = (FGetShareData)GetProcAddress(hdll, "GetIcData");
      if(GetShareData == NULL)
        return -1;  GetShareData(&sharedata->stPriceData, &sharedata->stTimesData, &sharedata->stPowerData,
        &sharedata->stWarnData, &sharedata->stICData, &sharedata->stItData);
      return 0;
    }
    里面的指针类型的参数用VB怎么传啊 急啊 555