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

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

编辑:说三道四文库 发布时间:2017-05-29 03:50
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();
叶琪:Hadoop不是万能的 要明确场景扬长避短 云网融合驱动数据中心技术聚变 给想持续编码CEO的4个建议 盘点开发者最喜爱的十大开源Xcode插件 Cloudera CTO:取代MapReduce 未来会加大Spark等框架投入 中航信资深分析师李洋:自主搭建云平台 助力民航业低成本迎接大数据挑战 安全狗创始人陈奋:借助Hadoop与Spark,欲打造服务器上的360 业界良心:Square开源Viewfinder,25万行代码全公布! 比尔&#183;盖茨:核心业务Bing虽不赚钱,却不能拆分 不可错过,参加第六届中国云计算大会的十大理由 章津楠:未来三年,OpenStack将成为企业去V首选 EMC收购闪存初创公司DSSD,走出联合储存战略第一步 创业失败的七个原因及解决之道 集结号:最受开发者欢迎的跨平台游戏引擎 Cocos2d-x v3.0正式版本发布!优化C++、Lua、JavaScript接口 定价99元首发1万台 360安全路由器启动预约 AMD新产品线曝光 首次实现X86与ARM针脚融合 IT界最难以替代的9个角色 《近匠》英特尔&#174; XDK:从开发、测试到部署,一站式HTML5开发工具 手游云测工具TestBird:测试走入垂直细分领域 阿里巴巴赴美IPO的种种及马云内部邮件全文 盘点EMC World 2014三大看点 2014年Q1:智能手机总销量下滑,WP同比反增119% 着眼无人驾驶技术 英特尔投资日本ZMP公司 移动云服务UCloud快速扩张 成立北京分公司 精准推送 个推推出2.0产品“Smart Push” 从张小龙的七大价值观说开去 2014高德LBS应用大赛正式启动 助力打造生态圈 专访永洪科技CEO何春涛:管理者的炼成及国内大数据公司的挑战 R语言如何发展?商业支持或许可行 专访InMobi CEO Naveen Tewari:Banner广告已经OUT 急救 sqlserver 6.5 急~~到底是病毒作孽还是系统问题?? 燃眉之急,请各位指教 怎么知道数据库是否存在某个存储过程,在线急等! 请教:取CppWebBrowser中的page source 为什么我提交后的页面却又Dreamweaver打开了提交后的页面? 我用web程序生成了word的document的对象,怎么通过网页输出word文件?不是保存到硬盘,而是response到用户? 一道怪题,欢迎讨论 谁知道关于调整麦克风音量的API函数???请叙述详细一些,紧急,谢谢!!!!!! 发布一个串口调试程序,若用的着请进,急急急!!! 请问有那些关于vc界面的书呢? 请问大家硬盘是怎么装的,电路板朝上还是下,或者是斜着的?对硬盘有没有影响?up有分 关于动态SQL的问题,请各位大虾帮忙,急急.............. 为什么触发器只触发最后一条记录?(付触发器) 怎样查找一个时间范围的数据? 在Workflow流程中,如何实现域值的改变? 访问该页者有分!!!!!!!!!!!!!! 数据库问题!急用! 为什么触发器只触发最后一条记录?(付触发器) 我用web程序生成了word的document的对象,怎么通过网页输出word文件?不是保存到 俯卧撑次数首次超40,放分! 一个使用motoSDK的问题请较! 一个奇怪的问题?? 我用web程序生成了word的document的对象,怎么通过网页输出word文件?不是保存到硬盘,而是response到用户? 一个非常初级的问题。 中国积极培养电脑“网络战士” ---泰晤士报星期刊 sco unix 高手请进 我再放!! 求救!!!!!!一个SQL的问题 为什么用中断1A获取网卡的配置空间时,在偏移量10h处只能获取mac地址的前8位,后4位无法获取??? 我又放!! 存储过程的高级应用问题,急用! 在combobox中禁止某些字符输入,为什么不成功? 我没完没了的放!! 怎么把数字39显示成0039,同理9显示成0009,多谢指教(在线等待) 大虾:如何用ADO向Access2000的BLOB字段中放图像文件?请赐教!... ASP.NET 调试问题 pb 有没有中文版呀`~~或者是汉化包呀`~ 如何做程序组安装盘???---在线等候!!! 存储过程返回值判断出错,大家看看是存储过程出错还是asp.net代码出错,给300分!! weblogic怎么老跟sqlserver连不上? 请各位前辈帮帮我。怎样能收到外部发进来的邮件?? 有在web上显示数据库中图片成功的吗?是sybase数据库。我们交流一下。 是谁干的站出来!!! 电子书籍请教!!! 哪里有InterBase6.0 Server下载?? recordset、connection等的释放内存问题:是不是每用一次都要set =nothing? Analysis server 2000的Bug ? 寻找SQL Server系统存贮过程和函数 各位DX,什么地方有windows 2000 platform sdk 下载啊?!!!!! 看了C++ language programmer (特别版) 有机污染物进入水体后水的溶氧量变化 拉瓦锡通过实验证明得出结论氧气占空气的1/5,但在我们的实验中,为什么测得的氧气分数大于1\5?顺便还可以讲一下为什么测得的氧气分数会小于1\5? 食物在体外燃烧与体外氧气的过程完全相同 对还是错 胶棒和碘酒会起化学作用吗?有毒吗?好的加分.我有次不小心把碘酒撒在胶棒上了,结果变黑了. 磁性液位计老是出现假液位是何故啊电厂的氨站磁性液位计老是出现假液位,氨灌实际液位是1.9M,好久未用氨气天天只是维护状态,在常温下频繁出现假液位现象,一天好几次请问何故? 体外燃烧和体内氧化的化学本质一致是什么意思 熟悉华为ONU的达人请进请问ONU有那几种板卡?我记得有什么电源板,用户板,那个可以接网张出站,可以提供用户上网的那块板叫什么名字来的?还有那个做主导作用的板叫什么? 焦性没食子酸的碱性溶液是酸性还是碱性,我想既然是碱性溶液,为何答案说是因为在这种强酸环境下碳酸钡会溶 保证食物在体外能够充分燃烧的条件()? 平面汇交力系平衡的充分必要条件是? 化工铜洗岗位液位计产生假液位的原因是什么 怎么太阳燃烧不尽,天体外还有啥东西啊? 华为八口的ONU 5626与4口的hg8240有何差别 磁性浮子液位计为什么会造成假液位 什么东西可以自燃烧 我想了解下丁晴橡胶NBR3305/3304在柴油中的体积溶胀率大概是多少?对于体积溶胀率有没有相关的标准? 华为ONU各个指示灯的意义 如图所示在碱性溶液中可……第二题, GPON的上下行波长是多少? 华为24口onu怎么注册VERSION :MA5600V800R008C01PATCH :SPC200 SPH312 HP2112PRODUCT MA5680TUptime is 18 day(s),7 hour(s),23 minute(s),21 second(s)怎么注册啊 将盛有和混合气体的试管倒立于水槽中,经过足够长的时间后,溶液充满整个试管,则原混合气体中O2和NO的体积比是多少?A.1比3 B.1比4 C.3比4 D.3比1 铵标准储备溶液的配置称取3.819g经100℃干燥过的优级纯氯化铵溶于水,请问,干燥多长时间啊? 力的作用线都在同一平面内且汇交于一点的力系称()力系 A空间汇交 B空间一般 C平面汇交 D平面一般三个刚片用()的三个铰两两相联可以组成几何不变体系A共线B不共线C虚拟D不虚拟 看到有很多人问过这个问题,因为意思实在太多了~看时看到一篇文章叫(貌似是这个名字- -|||)这里的RP是什么意思?"让我的RP爆长吧!"超级RP的图啊~ 橡胶在液化二甲醚有机溶液中的溶胀过程? 如何用几何法和解析法表述平面汇交力系的平衡 RP是啥意思? 50%的柠檬酸铵溶液怎么配制? 不锈钢零件应该怎样计算它的价格? 同上他们总是说什么很RP 模拟放大器电路,电流电压转换电路的问题?如上图所示,电流电压转换电路,为什么电流源的电流全部的流过Rf,而不从Rs流到地呢? 换电容式液位计试试 火的本质是什么?火焰有的能看见,有的看不见,那些分子到底是些什么物质?火和光有什么关系?火的组成成分?由哪些离子组成? 管道勾头作业应注意哪些安全事项? 拉瓦锡通过实验得出的结论是氧气约占空气总体的1/5,而在我的实验中,为什么气体减少的体积小于1/5? “火”的本质是什么?“金”,“木”,“水”,“土”分别有对应的物质,“火”是什么物质? 市政管线勾头是什么? 测量范围大的电容式位移传感器的类型为( ).A、变极板面积型 B、变极距型 C、变介质型 D、容栅型 火的本质是什么?它是由什么构成的? 管道勾头是什么意思. 平面汇交力系平衡的解析法的解题方法?我想要的是解题方法 谁可以给我个例题解释下 要详细一点的 除了酸溶液可以跟碱溶液反应,还有说明可以和碱反应 管道,水道,管道工,水道工 译为英语 建筑施工管道工部分应注意之多少米至多少米直径的管可采用压绳法下管? 运算放大器是什么 橡胶件在硫化过程中过硫,对做出的产品的弹性,伸缩性有什么影响? 建筑施工管道工部分应注意之 直径多少米以下的管可采用溜绳法下管? 什么叫运算放大器? UG管道一头是圆的一头是扁的怎么画 力学土木工程高手进、平面汇交力系有几个平衡方程可以求几个未知量,还有平面力偶系和平面一般力系呢 某工厂为了车辆进出的安全,在厂门口安装了广电控制警铃,从汽车车头驶到厂门警铃响,知道车位驶离长门时停止.一辆大货车以3.6km/h的速度驶出厂门,警铃响了6s,求该货车车长多少? 完整解答 乙炔与氯化亚铜氨的反应 一个液位计可接两个液位显示表吗?对测量的准确性有没有影响? 某工厂为了车辆进出的安全,在厂门口安装了光电控制警铃,从汽车车头驶到厂门到车尾驶离厂门的一段时间内,警铃都会发出信号.一辆大货车以5KM/H的速度驶出厂门,警铃响了6S,问该辆车有多长 LM2907用于频率电压转换时优点有哪些 拉瓦锡通过实验得出的结论是氧气约占空气总体积的1/5,而在我们的实验中,为什么气体减少的体积小于1/5? 在某厂门口安装了光电控制警铃,从汽车车头驶到厂门口到车尾驶离厂门的一段时间内警铃都会发出信号.一辆大货车以5km/h的速度驶出厂门,警铃响了6秒,则该辆车有多长 太阳板的电压和转换效率怎样算太阳板的片数与电压的关系 请问最早通过实验得出空气是由氧气组成的这一结论的科学家是A道尔顿B拉瓦锡C普利斯特里D汤姆生 打雷的时候为什么车的警铃会响!这一段时间雷雨时候特别多,每次打雷的时候,我们公司的那些车就一个接一个的响,想问一下为什么
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘