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

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

编辑:说三道四文库 发布时间:2017-09-24 08:28
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();
Oracle和微软的抱团,以及对抗Amazon霸主的5个可用点 Agile已死 Agility长存? 论程序员的自我修炼 Github女员工因遭性别歧视离职 继七年iPhone、四年iPad后,苹果的下一城:Healthbook 普元CTO焦烈焱:专注于基础软件 在Spark上的深入实践 Python 3.4.0正式发布 未添加任何新语法特性 谷歌受困邮件挖掘丑闻,企图抹掉庭审记录 Python 3.4.0发布,增加了多个功能模块 美的+阿里,“云端”战略第一把火是智慧家居 对产业互联网战略的战术思考——争夺企业信息入口的战争 加入Cassandra,OpenStack发力DBaaS生态圈 死磕Google Keep,微软正式发布Mac免费版OneNote 《近匠》安管云CTO石磊:降维安全的开放平台 2014 Unity亚洲开发者大会&#183;中国站讲师名单议题全部出炉 【独家专访】红旗Linux元老:猎猎红旗永飘扬 借助三大技巧 助你提升API状态页面 集成GemFire,Hadoop生态圈的又一把火 次世代光照体验:Unity 5面世,功能系统全升级 深入浅出,以咖啡店为例演示Web应用程序扩展 百度Clouda:可依赖的实时JavaScript开发框架 Oracle发布Java 8正式版及JDK 8 编程语言中一些令人抓狂的规则 廉颇未老,微软股价创14年新高 中国云计算大会PPT集萃(三):核心架构及应用实践 特性是增多了,但是Google的云服务仍然不温不火 全国云计算大数据创新项目评选活动正式启动 【独家专访】Perl发明者首次来华:将在OSTC大会分享其编程人生 腾讯核心创始人张志东半年后卸任首席技术官 改任终身荣誉顾问和学院讲师 咱们约会吧,Web设计师教你不一样的语言 开发者不容错过的10款免费JavaScript游戏引擎 很初级的问题. 关于DB2的培训资料或者ppt 初学JAVA希望大家介绍点好书,有分的哦~~~~~~~~~~ 关于DB2的培训资料或者ppt qqf (我就是我) 可以进来一下吗? 准备作一个短信项目,请做过类似项目的高手不吝指教! 关于刷新框架内页面的问题! 请教,真的很急,来看看,,, 帮忙出主意呀, 新认识一个MM, 特骄气, 爱好也少,怎么哄呀,或者兄弟们介绍一下经验. 求delphi 5开发人员指南 电子版 如何用四叉树进行图像压缩源代码 小问题 谁对nil理解的多呀,哈哈,来看看哦,超级难题 开机自检的时候屏幕花屏,无法进入操作系统。图形模式下花屏,文字模式下正常,怎么解决? 高分求助,JS菜单问题,在线等 我需要msdn最新版 连接 vb做报表的问题 好书推荐 我的站点怎么必须登陆? 这样能释放链表内存吗 请问如何手动调整datagrid的列宽? design pattern in java 书籍 关于调用外部文件并且打开一个应用程序的问题?? 请问create table 返回值为2 是什么意思? 如何象进入sina时一样弹出那种打广告的小框? 一个frame获取参数的问题 如何用Response.BinaryWrite输出文件内容 我想问一个隐藏表格的程序,好象很简单的 高手请进, 小弟有难!!!…………………… 哪里有详细介绍sql2000中pubs和northwind数据库的资料! 请教一个简单问题:请问哪里有lzw算法的详细介绍?压图片可以用这个算法么?有没有lzrw算法! 为什么一些网站把一张大图片要切开很多块? 有谁能确切解释edit.tag的属性tag的含义吗? 如何让打开的对话框自动充满客户区? 如何控制控件的前后位置关系? (100分)我copy了一段滚动的代码,怎么就是调试不通啊!帮忙啊! 用query读娶access里的“温度”字段数据怎么不行? KV2003,的问题 大家给点建议关于户籍方面的数据库系统的投计! SQL求正解 请教一个简单问题:请问哪里有lzw算法的详细介绍?压图片可以用这个算法么?有没有lzrw算法! 求一考试座位编排算法 网络中传输的粘滞问题?(在线等) word到底是编译器还是编辑器 vb程序的帮助有什么软件可以写? PlaceHolder问题?? 绝对是问题,我是HOOKAPI来拦截REG注册表的函数,但是....... 各位高手,谁对nil有研究 Windows - 延缓写入失败是种什么错误?我的机器总是出现这样的问题,重装了还是一样 怎样改变菜单的颜色 各位,提点意见哈 怎么区别sour 和acid? 道德经讲了什么道理 Yesterday a street-beggar bought a lottery ticket purposelessly,____ him a millionaire overnight.A.making B.makes C.to make D.made选c.请清楚的解释一下 为什么省略了一个only 如果以后遇到类似的题怎么考虑 什么是植物甾醇 写专心的成语往往往往往往往往往往 谁知道哪里有卖<论语心得>书的?作者:于丹我要书,光盘我已经有了 不要用多媒体上课的教案哦 将孙权劝学分层 并用两个字总结层意 闰土死的?具体一点~ 故乡的桂花雨及阅读答案 《孙权劝学》讲了几件事?(概括出来) 班干部不该管理班级大大小小的事 辩论会陈词注意:大大小小 至少300字 仿照示例,从下面提供参考的事物中任选一个,分别从正反两方面立意,写两个有寓意的精短句.示例:秋叶正面立意:把自己揉进了护根的泥土,只为输送最后的余热.反面立意:冷风一吹,就不知 右图表示某动物的一个正在分裂的细胞,下列分析正确的是A. 若图中①②③上的基因分别为A,B,c,则④⑤⑥上相应位置上的基因应分别为a,b,c.B. 若③为X染色体,则⑥可能是Y染色体,其他为常染 题记如果是诗句或名言,要不要注明作者? 关于辩论赛中应如何向对方提出问题我们的辩论题是“个人的命运是由社会还是个人掌握”我们是反方“由社会掌握”不知道该如何向对方提出犀利不占弱势的问题求解!~~~ 右图表示动物细胞 如果7是抗体,则该细胞是 补充词语 叠词填空 目光 大雪 描写听讲的成语 电和磁.帮忙分析下./如图2所示,虚线区域内的“×”为垂直纸面的磁感线,当金属框沿光滑绝缘斜面的顶端,由静止开始滑到底端时,具有的动能为E1;若将金属框换成质量相同的塑料框,其他条件 短文填词:my mother is a teather o( ) English 上课听讲的成语 电与磁 无神论的歌词 I’m just working out all the things I need to buy,and worrying about money as usual.请帮翻译下 十一月四日风雨大作诗中年老体弱,僵卧孤村,出境本来寂寞凄凉,可诗人并不自哀,这是因为他日夜思念的是 正数的正号如果省略的话要读吗? 学而时习之的而是什么意思 孙权劝学这篇课文可分为四个层次,请分别用两个字概括出各层的大意.快,看清楚题哦, 正数前省略的+念正号还是加号?我现在小学,先问下初中的东西. 3、求证:若x、y为有理数,且x的平方+y的平方+1/2=x+y,那么x=y=1/2.1、求证:若x、y为有理数,且x的平方+y的平方+1/2=x+y,那么x=y=1/2. 阅读文章 腊八粥最后一段“我没有说什么,只泫然地低下头去,和他们一同剥起花生来”读文章 腊八粥最后一段“我没有说什么,只泫然地低下头去,和他们一同剥起花生来” 你怎么理解此时“ 推敲一词的来源是否来自于贾岛 有理数x、y满足(x的平方+y的平方+2)(x的平方+y平方-1)=0,x平方+y平方=? 腊八粥是用各种米,各种豆,与各种干果熬成的.腊八粥不是粥.腊八粥是小型的农业展览会.把这些句子用关联词连接. 位移是正的正号可以省略不写吗 如图所示,两根靠近但彼此绝缘的直导线互相垂直,通入大小相同的电流,在哪一个区域两根导线的磁场方向一致 形容听课听的入迷的成语 “推敲”一词的来历 如何理解中华民族到了最危险的时候这句歌词? 形容不认真听课发呆的成语? 有人知道“推敲”一词的来历吗?贾岛这个人爱琢磨,有的人写诗是“喷”出来的,而贾岛不是,他的诗是“磨”出来的.有一次,贾岛在琢磨“僧推月下门”还是“僧敲月下门”的时候,冲撞了韩愈 一环形线圈放在匀强磁场中,设第1S内磁感线垂直线圈平面向里,如图甲所示.若磁感应强度B随时间t变化的关系如图乙所示,那么第三秒内线圈中感应电流的大小与其各处所受安培力的方向是A大 看道德经的作用 天净沙秋思 昏鸦的昏字,除了与夕阳西下呼应,还能读出什么意味 40.赖氨酸有3个pK值,pKl=2.1;pK2=9.0;pK3=10.5;赖氨酸的pI为:5.怎么算?我只知道pI=1/2(pK1+pK2) 为什么中国人内战内行,外战外行? 用简单的话说说 “推敲”一词的来历快, 描写大草原和长江的古人诗句是什麼 名词:外行,内行;形容词:外行的,内行的,英文分别怎么说? 动物是人类的朋友,“保护动物,珍爱生命”是我们义不容辞的责任.为此,请你给狩猎者写一封信,300字左右 谁知道关于大草原 长江的古人诗句 内斗内行, 为什么要相信无神论?希望从正面回答,科学严谨的态度回答.说怪话的就省省吧.是谁告诉你们科学和有神论是相冲突的呢?科学和有神论冲突么?相信科学,就要反对有神论么?可,科学发达的西方 acid food酸水果和sour的用法有什么区别 道德经讲了什么 中国官方是无神论主义者吗但是很多人都是不可知论者, 对吗. sour和acid之间的区别是什么? 少量饮酒对身体有好处,请问下列哪种酒对心血管疾病有预防作用 中国的无神论的人数、到底有多少人? 津巴布韦航空一客机引擎空中着火 成功艾弗森将退役詹韦致敬 詹姆斯:乔丹之中储粮:2家企业违规进口的转基因菜油足协公布中超最佳候选 里皮埃尔克森得曼城输球主帅火气大 佩莱格里尼:不想NBA新赛季看群雄“灭火” 马刺依然天价球员托雷斯强势复苏 切尔西登上积市民投诉劳动仲裁超期 南京人社局称人NBA新赛季首期实力榜:热火占鳌头 湖南长沙现“土豪金”大道 200公斤“株连式”拆迁频现 媒体称背后是权力实拍:中国核潜艇导弹发射平台、艇员住美议员:监听确保了欧洲安全 盟友们应埃及一运动员因支持穆尔西而被剥夺比赛茶党加速美国政坛裂变 抓住政府软肋屡日本孤独人群增多朋友租赁登场 每小时湖北公安县屡曝摊派烟酒 动用“红头文中韩文化交流大会在北京举办“监听门”尚难撕破美欧关系巴基斯坦:一部族长老家遭武装人员袭击马尔代夫选举委员会驳回提前选举建议大自然美国风尚地板节刮起红橡风首批68个示范项目 鼓励社会资本参与微国际我市今年共培训持证社工5392人次“九天揽月 中国探月工程展”开展A股再添“中华老字号”借力双11 中国快递有望跃居世界第一探索武术入奥 成都做出可贵尝试2015年成都市中小(微型)企业培训证监会放行证券业最大并购川股忙转型 牛股多发地彭州市检察院“行刑衔接”打击犯罪更神每期推介中国体坛掀起反腐风暴 花游部前主任俞我市首批出入境服务站昨日运行阿里巴巴公布上市后首份季度财报 盈利万毅:法学专家教你保护钱袋子欧盟“外长”晤北约秘书长 乌克兰成为媒体:美国至少40%选民不会参加中期奉劝“占中”主力们:顺应民意,散了吧上海自贸区首发刑法适用意见 将严查职
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘