说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

救命:我有一DLL的源程序,但我不知如何调用,请各位高手看一下,谢谢,小弟只有29分

编辑:说三道四文库 发布时间:2017-07-28 07:13
HTML文档下载 WORD文档下载 PDF文档下载
//---------------------------------------------------------------------------
#pragma hdrstop
#include <string.h>

#include "all.h"
#include "crc.h"
#include "header.h"
#include "subband.h"
#include "sublay1.h"
#include "sublay2.h"
#include "synfilt.h"
#include "ibitstr.h"
#include "obuffer.h"
#include "args.h"
#include "layer3.h"
#include <winbase.h>
#include <classlib/thread.h>
#include <winsys/wsysinc.h>
#include "maplay.h"
#include "MPex.h"

MPEG_Args *ma = NULL;
char Stream_Name[512] = "";
HWAVEOUT hwo;
volatile uint32 musicsize = -1;


extern bool* StopHook;
extern int ResultError;

extern uint32 startplay(MPEG_Args *);

extern uint32 layer;
extern Header *header;
extern Crc16 *crc;
extern Ibitstream *stream;
extern enum e_channels which_channels;
extern enum e_mode mode;
extern bool read_ready, write_ready;

extern SynthesisFilter *filter1, *filter2;
extern Obuffer *buffer;
extern LayerIII_Decoder *l3decoder;

extern TPlayThread *player;


extern "C" bool _export _stdcall __declspec(dllexport) init()
{
  ResultError = mpSuccess;
  if (ma !=NULL) {
    ResultError = mpIncorrectMode;
    return(false);
  }
  try {
    ma = new MPEG_Args;
  }
  catch (...) {
    ResultError = mpInternalError;
    return(false);
  }
  ma->phwo  = &hwo;
  ma->musicpos = -1;
  ma->playmode = 0;
  ma->output_mode = O_WAVEMAPPER;
  lstrcpy(ma->output_filename, "");
  musicsize = -1;
  return (true);
}

extern "C" bool _export _stdcall __declspec(dllexport) UseScaleFactor (bool usescale, float factor) {
   ResultError = mpSuccess;
   if (ma == NULL) {
      ResultError = mpIncorrectMode;
      return(false);
   }
   ma->use_own_scalefactor = usescale;
   if (usescale) {
      ma->scalefactor = factor;
   }
   return(true);
}

extern "C" bool _export _stdcall __declspec(dllexport) SetOutputDevice (int mode, char* outputname){
// 0 - wavemapper, 1 - directsound, 2- wavefile
   ResultError = mpSuccess;
   if (ma == NULL) {
     ResultError = mpIncorrectMode;
     return(false);
   }
   switch (mode) {
     case 0: ma->output_mode = O_WAVEMAPPER;
             break;
     case 1: ma->output_mode = O_DIRECTSOUND;
             break;
     case 2: ma->output_mode = O_WAVEFILE;
             strcpy(ma->output_filename, outputname);
        break;
   }
   return(true);
}

extern "C" int _export _stdcall __declspec(dllexport) LastError()
{
  int res;
  res = ResultError;
  ResultError = 0;
  return(res);
}

extern "C" int32 _export _stdcall __declspec(dllexport) GetCurrentPos()
{
   ResultError = mpSuccess;
   if (ma == NULL) {
      ResultError = mpIncorrectMode;
      return(-1);
   }
   return(ma->musicpos*ma->MPEGheader->ms_per_frame());
}

extern "C" int32 _export _stdcall __declspec(dllexport) GetLength()
{
  return(musicsize);
}

extern "C" uint32 _export _stdcall __declspec(dllexport) GetLayer()
{
  ResultError = mpSuccess;
  if (ma == NULL) {
    ResultError = mpIncorrectMode;
    return(-1);
  } else {  return(ma->MPEGheader->layer()); }
}

extern "C" uint32 _export _stdcall __declspec(dllexport) GetBitrate()
{
  ResultError = mpSuccess;
  if (ma == NULL) {
    ResultError = mpIncorrectMode;
    return(-1);
  }
  return(ma->MPEGheader->bitrate());
}

extern "C" uint32 _export _stdcall __declspec(dllexport) GetFrequency()
{
  ResultError = mpSuccess;
  if (ma == NULL) {
    ResultError = mpIncorrectMode;
    return(-1);
  }
  return(ma->MPEGheader->frequency());
}

extern "C" bool _export _stdcall __declspec(dllexport) Seekable()
{
  ResultError = mpSuccess;
  if (ma == NULL) {
    ResultError = mpIncorrectMode;
    return(false);
  }
  return(!ma->nonseekable);
}

extern "C" void _export _stdcall __declspec(dllexport) ResetPlayerMode()
{
   ResultError = mpSuccess;
   if (ma == NULL) {
     ResultError = mpIncorrectMode;
     return;
   } else {
       if (ma->playmode == 2) {
           ma->playmode = 1;
           *StopHook = false;
       }
     }
}

extern "C" int32 _export _stdcall __declspec(dllexport) GetPlayerMode()
{
  ResultError = mpSuccess;
  if (ma == NULL) {
    ResultError = mpIncorrectMode;
    return(-1);
  } else {
        return(ma->playmode);
     }
}

/*

enum TPriority {
   Idle         = THREAD_PRIORITY_IDLE,
   Lowest       = THREAD_PRIORITY_LOWEST,
   BelowNormal  = THREAD_PRIORITY_BELOW_NORMAL,
   Normal       = THREAD_PRIORITY_NORMAL,
   AboveNormal  = THREAD_PRIORITY_ABOVE_NORMAL,
   Highest      = THREAD_PRIORITY_HIGHEST,
   TimeCritical = THREAD_PRIORITY_TIME_CRITICAL,
};

*/
extern "C" bool _export _stdcall __declspec(dllexport) SetPriority(TThread::TPriority value)
{
  ResultError = mpSuccess;
  if (ma == NULL) {
    ResultError = mpIncorrectMode;
    return(false);
  }
  ma->playpriority = value;
  if (ma->playmode == 3 || ma->playmode == 4) {
     player->SetPriority(value);
  }
  return(true);
}

/* extern "C" bool _export _stdcall __declspec(dllexport) GetPriority(TThread::TPriority* value)
{
  if (ma == NULL) {
    ResultError = mpIncorrectMode;
    return(false);
  }
  *value =  ma->playpriority;
  return(true);
}  */

extern "C" bool _export _stdcall __declspec(dllexport) Seek(uint32 pos)
{
  ResultError = mpSuccess;
  if (ma == NULL) {
    ResultError = mpIncorrectMode;
    return (false);
  }
  if (ma->nonseekable) {
    ResultError = mpIsNonseekable;
    return (false);
  }
  if (ma->playmode == 3 || ma->playmode == 4) {
     if (pos > musicsize) {
        return(false);
     }
     ma->position_change = true;
     ma->desired_position = pos/ma->MPEGheader->ms_per_frame();
  } else {
      ResultError = mpIncorrectMode;
      return(false);
    }
  return (true);
}

extern "C" bool _export _stdcall __declspec(dllexport) Open(char *Name, bool from_res,
                                                       ResCreateStream CSProc,
                                                       ResCloseStream ClSProc,
                                                       ResRestartStream RSSProc,
                                                       ResReadStream RSProc,
                                                       ResSetPointer RSPProc,
                                                       ResGetSize RGSProc,
                                                       void* object)
{
  ResultError = mpSuccess;
  try
  {
    Crc16 *crc = NULL;
    if (ma ==NULL || ma->playmode >1){
      ResultError = mpIncorrectMode;
      return(false);
    }
    if (from_res) {
      ma->stream = new Ibitstream(CSProc,
                                  ClSProc,
                                  RSSProc,
                                  RSProc,
                                  RSPProc,
                                  RGSProc,
                                  object);
    } else {
      if (Name==NULL) {
        ResultError = mpStreamError;
        return(false);
      }
      strcpy(Stream_Name, Name);
      ma->stream = new Ibitstream(Stream_Name); // read from file
    }
    ma->MPEGheader = new Header;
  }
  catch (...) {
    if (ResultError == 0) { ResultError = mpInternalError; }
    return(false);
  }
  ma->nonseekable = ma->stream->nonseekable;
  if (!ma->MPEGheader->read_header(ma->stream, &crc)) {
    ResultError = mpStreamError;
    return(false);
  }
  ma->playmode = 1;
  musicsize = ma->MPEGheader->total_ms(ma->stream);
  ma->endpos = musicsize;
  ma->startpos = 0;
  return(true);
}

extern "C" int _export _stdcall __declspec(dllexport) Play(uint32 startpos, uint32 endpos , bool* PlayStopped)
{
   ResultError = mpSuccess;
   if (ma==NULL || ma->playmode >2) {
      ResultError = mpIncorrectMode;
      return(0);
   }
   StopHook = PlayStopped;
   ma->stop = false;
   *StopHook = false;
   if (startpos >0 && startpos<endpos && startpos < musicsize) {
      ma->startpos = startpos/ma->MPEGheader->ms_per_frame();
   }
   if (endpos <=musicsize ) {
      ma->endpos = endpos/ma->MPEGheader->ms_per_frame();
   } else {ma->endpos = musicsize/ma->MPEGheader->ms_per_frame();}
   if (endpos == 0) {
      ma->endpos = musicsize/ma->MPEGheader->ms_per_frame();
   }
   return(startplay(ma));
}

extern "C" bool _export _stdcall __declspec(dllexport) Pause(bool resume)
{
  ResultError = mpSuccess;
  if (ma == NULL || player == NULL) {
      ResultError = mpIncorrectMode;
   return(false);
  }
/*  if (ma->playmode == 4 && resume) {
     ma->playmode = 3;
     player->Resume();
  } else
  if (ma->playmode == 3 && !resume) {
     ma->playmode = 4;
     player->Suspend();
  }
*/
///*
  if ((ma->playmode == 4 && resume) || (ma->playmode == 3 && !resume)) {
    ma->pause = true;
  }
//*/
  return(true);
}

extern "C" bool _export _stdcall __declspec(dllexport) Restart()
{
   if (ma==NULL || ((ma->playmode != 1) && (ma->playmode != 2))) {
      ResultError = mpIncorrectMode;
      return(false);
   }
  *StopHook = false;
  if (!ma->MPEGheader) {delete ma->MPEGheader;}
  try
  {
    ma->MPEGheader = new Header;
  }
  catch (...) {
    if (ResultError == 0) { ResultError = mpInternalError; }
    return(false);
  }
  if ((!ma->stream->restart()) || (!ma->MPEGheader->read_header(ma->stream, &crc))) {
    ResultError = mpStreamError;
    return(false);
  }
  ma->playmode = 1;
  if (Play(ma->startpos*ma->MPEGheader->ms_per_frame(),
           ma->endpos*ma->MPEGheader->ms_per_frame(),
           StopHook)!=0)
  {
    return(false);
  } else {return(true);}
}

extern "C" bool _export _stdcall __declspec(dllexport) Stop()
{
   ResultError = mpSuccess;
   if (ma == NULL || (ma->playmode < 2)) {
     ResultError = mpIncorrectMode;
     return(false);
   } else {
    if (ma->playmode == 2) {
        ma->playmode = 1;
        return(true);
      } else
      {
       ma->stop = true;
       if (ma->playmode == 4) {
         Pause(true);
         while (ma->playmode == 4)
         {
           Sleep(0);
           ma->pause = false;
         }
       }
       player->WaitForExit(INFINITE);
       ma->playmode = 1;
       *StopHook = false;
       return(true);
      }
     }
}

extern "C" bool _export _stdcall __declspec(dllexport) Close()
{
   ResultError = mpSuccess;
   if (ma == NULL || ma->playmode<1) {
      ResultError = mpIncorrectMode;
      return(false);
   }
   if (ma->playmode == 3 || ma->playmode == 4) {
     Stop();
   }
   delete ma->MPEGheader;
   ma->MPEGheader = NULL;
   delete ma->stream;
   ma->stream = NULL;

   musicsize = -1;
   ma->musicpos  = -1;
   ma->playmode  = 0;
   return(true);
}

extern "C" bool _export _stdcall __declspec(dllexport) deinit()
{
   ResultError = mpSuccess;
   if (ma == NULL) {
      return(true);
   }
   if (ma -> playmode>0) {
     Close();
   }
   delete ma;
   ma = NULL;
   return(true);
}

//---------------------------------------------------------------------------

不知其中的Open()如何调用
天,好長的代碼,我只能告訴你,其中 extern 打頭的都可以用,只需在你的exe中聲明為
extern "C" __declspec(dllimport) bool _stdcall Open(...)即可
//先定义 变量
HINSTANCE handlerDLL=NULL;
typedef bool(*Pfun)(void); //定义指向函数的指针
Pfun fun;
//...
//...
////

if (handlerDLL!=NULL)
{
MessageBox("the dll has been loaded");
return;

}
   handlerDLL=LoadLibrary("test.dll");
   if (handlerDLL==NULL)
   {
          MessageBox("Cannot load dll");


   }
   fun=(Pfun)GetProcAddress(handlerDLL,"Init");
   //下面的代码就是调用函数Init;
     
   fun();
Cue:秒杀HealthKit,打造自己的家庭医生 新iPhone要来:4.7就够了么?我们还有更大的 Docker迈入云(DockerHub)+端(Docker引擎)时代 《近匠》壹枱智能钢琴:改造音乐行业的新“玩”家 圣何塞Hadoop Summit 2014看点 唯快不破!90后大学生9天完成近670页的Swift语言文档翻译 一周消息树:Java、.NET、Web技术应用特点 苹果生态格局:软硬件之后,iLifestyle才是王道 小米互娱总经理尚进:独立游戏当为发烧而生 哪些编程语言、框架/平台最受企业青睐? 高德LBS应用大赛:百万大奖、千万基金等你来拿! Gartner:有数据有真相 从浪潮看服务器市场走势 PhoneGap 3.5.0发布,不再支持iOS 5和ARM64 “中美青年创客大赛”之“创客&#183;教育论坛” 以创客教育支持创新人才培养 授之以渔,谷歌发布开源秘密武器Kubernetes 炫耀分数已经out!ShareSDK发布游戏内视频录制SDK Android开发者必知的5个开源库 UCloud完成B轮融资5000万美元 Git远程操作详解 《近匠》iMAG:移动应用快速跨平台开发工具 Facebook斥资30亿美元购Snapchat遭拒后,推Slingshot 全球开发者报告:程序媛崛起,企业应用更赚钱! 土豪经济 E人E本发布首款4G安全手机 内忧外患:Android版FuelBand应用来得太迟? MongoDB 2.6.2 发布,大大改进查询功能 清华毕军&amp;amp;华为马云:SDN是学术和产业都看好的领域 向三星和苹果发难:亚马逊FirePhone 3D手机强势来袭 支付宝移动端与NFC芯片商、手机商合作 推出近场支付产品 Go 1.3正式发布,改进正则表达式! API设计如龙生九子,Tunneling、Hypermedia等更受开发者青睐 NFV+SDN,博科打造开放式网络平台 三层MIS中的中间件怎么用COM或EJB来实现. 请问哪里的个人主页控件支持JSP? 再次请教一个有关DataGrid不能显示而令人头晕的问题(在线等待)! 做过考勤管理的请进………… 在ASP.NET中怎样实现语句加入引用? 请问下面这个问题应该怎么解决最好?关于处理网页中的数据的 使用VB6自带的Sample中自动化示例应用程序时的一个问题 那位高手知道怎样实现曲线分析图... 一个简单SESSION 问题,请解决。在线等,没分了不好意思. 为什么在asp中使用ADODb的Connection对象的方法时不能使用事务处理 ====寂寞啊!谁帮介绍一个女孩啊(15-18)岁的!!万分感谢!==== 高分请教大虾,关于搜索的问题?。。。。 100分请教一个简单的问题?? runtime在JAVA中解释应该是什么意思? SCO上的ORACLE7建库?SOS 大家来看看,超级Bug?用DBExpress连接MSSQL,执行存储不能返回值,谁能解决,200分 高分请教,谢谢了/。。。。 我在程序中使用了MSXML,可是在干净的win98下无法运行,请问需要安装什么? 救急: SQL server的数据恢复 关于分辨率的问题。 在vb.net中能做dll吗?请大家可参与 下面的函数怎样声明? 能直接用alter语句修改某个字段的类型和长度吗? 如何做pci 插卡? 关于datalist绑定问题 我的前途???欢迎大家发表意见! 急求 如何测试asp ■■■■为防止下一场水园恶战,水源马甲联盟再次公开马甲id 密码■■■■ 自定义对象的实例怎么在ViewState里保存 把資料漚出成txt,doc,xls格式的文件,在漚出過程中,但是漚出成xls(Office2000)正常,officexp就出現亂碼? citrix数据引擎是什么? 刚刚我和她分手了 在數據窗口中怎樣打印jpg文件 为什么我的pws安装时提示需要winsock32?? 如何在grid表格或临时表里实现累加 请教一个四舍五入的问题? 各位老鳥,請問怎樣用ADO控件連接到一個Excel文件 oracle8i存储过程怎么写? 在线等待-----安装问题!!急急急急 我的拨号出了什么问题???急救!! 交換機連到交換機(兩個都是d-link的),如何連? 在php中如何将图片上传到服务器的MY SQL数据库中。紧急 关于视图位置疑问 缩进 急急!谢谢! 100分!在线等!急急急急急急急急急急急急急急急急急! DLL hell 关于javascript的错误,运行到该段程序,老出错,帮我看看。 别的工具调用EJB问题。 如何识别对象?? 宁波上半年生产总量全省第二 下半年抓杭州近百万亩农作物受旱灾 抗旱重在保金华昨天火箭人工增雨成功 气温骤降1义乌宗泽北路最后一个拆迁户终拆除 9浙江将启用最严格制度治水 省领导或亲杭州西湖区小学新生比去年增加1200金华昨召开深化作风建设大会 通报处理浙江7月份全省降水量比常年同期偏少七杭州连日大风吹乱荷塘 鲜藕减产几成定浙江绍兴超40万亩苗木因高温受损浙江高考第三批分数线公布 文科271台风飞燕致浙江近两天凉爽 下周仍回4杭州召开区县(市)委书记工作汇报会杭州西湖区将建17个学校地下停车场杭州出售赠与和抵押房产只认房产证上的本周继续晴热高温 未来10天可能有台昨日杭城一天清凉 今天高温晴热卷土重淳安被列为生态“单列县” 不再考核工浙江管钱能力全国第七杭州今年河道治污完成近半 五条河道将杭州天城路将拓宽为双向8车道 往东将新晋老板Pharrell首度主导RA这180万人要重新找工作!(看看有你“兔子绅士”时髦归来 JOYRICH平安银行信用卡办哪张好?持卡人享餐饮3.15:翼虎7天断腿,在华之路该如03.03收评:十字星或藏有海量秘密让明星们跟它去旅行,“无二之旅”凭什招行消费易如何还款2016,3D打印的“钱途”和机遇全国人大代表黄细花:生育假延至180单身狗们看完可能会不开心……斯帅上任恒大首败,保守的他会变革吗?有的人撩妹就是那么厉害,那么突如其来一线楼市场外配资助长投机潮 专家建议XB老总:玩家应放下平台之见共同欣赏A股绝地大反弹背后:58家公司股东减微软愿做中间商,不打算开发Xbox 新三板日报:做市指数跌0.25%报1甘世振:投资常见三种误区,你是否有察沪指收复2850点 李大霄:婴儿底已股价曾两个月涨200% “潜力股”浪
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘