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

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

编辑:说三道四文库 发布时间:2017-01-25 01:30
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();
美FDA通过搜索引擎和社交平台预警药品副作用 挖坟三星“眼球追踪技术”背后的技术团队 为什么开发者热衷在Stack Overflow上查阅API文档? Facebook推新News Feed 欲造就“个性化报纸” 女神程序员的一天:暴力测试social爬虫代码 2013IBM云存储路线图:更快,更简单,更安全 二战大数据故事:数学家、物理学家、概率论击败德国潜艇 软件定义网络服务商Pertino B轮融资2000万 Scringo社交组件,让你的应用“热闹”起来! Android开发必备:Eclipse 4.2 SR2版本发布 32场!2013年360HTML5校园行首站告捷 移动周报:不做内容,只钻技术的快播 一周消息树:中国开源发展缓慢的“病因” 百度应用引擎BAE正式开放 新增支持Node.js CloudVelocity,下一个VMware? Buffer创始人谈开发:先验证,后编程! 谷歌可穿戴式产品再度来袭:会说话的鞋子 未来Chrome OS或取得Android般成功 云落地@北京,北京市北斗公共平台或开放API? GitHub再遭攻击 主要服务中断约一小时 移动开发者将有望拥有.app域名使用权 微信将推“游戏中心”?移动互联网入口圈地加剧 美国航空公司首次开放API 并举办“黑客马拉松”编程大赛 谷歌数据中心设计的10条“黄金法则” GitHub时代:为什么我们都在开源 VMware发布Horizon Suite 三款应用打包折扣低 TOP30+应用排行榜:二月份国内外综合榜单 开源是否意味着不需要负任何责任? 微软年度科技展 酷炫技术知多少 图解Hadoop生态系统 HTML5并不给力 微软IE10又默认启用Flash 【 关于数据库的问题,请帮忙。 】 单击CListCtrl中的CheckBox触发什么事件?该用哪个函数处理? 关于VXD的问题1 急!!!一个怪问题! 怎样获取指定框架(frame)的大小? 各位大虾,小弟有一个关于windows2000的问题 招聘信息 Happy Time!关于邮件安全谁有好的建议?找一个不运行脚本和控件的客户端还是自己写一个? 做一个合格的程序员需具备那些知识? EXCEL.APPLICATION的关闭事件 再次retrieve时报错“ARITHMETIC OVERFLOW OCCURRED” 急:如何在ASP中使用Microsoft Index Server? 简单但是比较不常用的问题,来拿分吧! 谁能告诉我有关一些开发e-mail软件的资料 我想要源代码 用ADO DATA控件和ACCESS数据库连接好后,怎样断开。 软体蛀虫再战江湖,续原来的帖子“愿意给中国共享软件作者提供一些帮助,共同推动中国软件业!”。请大家赏光 请问:各位在数据库的时候,对于性别,使用0/1 还是男/女 程序运行后,改变屏幕的分辨率后,比如改小,则程序窗体有部分到屏幕外边了,如何在改变分辨率的时候,让程序的窗体大小也跟着改变? 各位高手帮帮忙!!!!!!! ------急--------急---------急--------- 在c/s结构中,到底用不用数据敏感控件? 用ALT+F4关闭窗口会不会引发form_queryunload和form_unload事件? 请对表格熟悉的资深高手请进! 在linux下怎样使用libpcap截获IP数据包并统计每个IP地址的数据流量以便计费???请给出一点思路。多谢! 怎样在用户控件中引用第三方的控件? 请教:为什么我的activex dll下载后不能使用 求救: access數據庫用戶組中Admin的密碼丟失,怎么辦? 请问各位 那里有 delphi的电子书籍下载??/ Oracle:怎样在Client和Server之间建立联系? JAVA中的2维数组赋值问题。 怎样将整形变量的值转换为字符串的值 为何汉字会变成乱码?? VC动态链接库调用的问题 怎样打开DLL中的Form? 庆祝这个开心的星期六!送分 如何在程序中将一个变量放入指定的节(session)中,而不论这个变量是否是初始化的? 登陆SQL PLUS 问题???请帮忙,谢谢!! 初学DirectX的几个问题 定时执行某段代码~ 有关ADO中智能指针的初始化问题?很菜的! 还是局域网共享文件夹密码问题,我看了袁哥的主页,按照他的方法怎么不行呢, where can we find free webspace to store my programs? 请各位大师救救我吧:如何在CRichTextCtrl或其他的什么控件中打开一个DOC文件,十万火急,答对50分一定奉上,谢谢! 这是什么错误:Exception in thread "main" java.lang.NoClassDefFoundError: TestBed/class 给我的网页提意见,来者有分!!!保证!!!http://kkoffice.yeah.net 在调用一些函数是,老是出错,说不能把我的AnsiString转换成char,我改怎么办呢? 我该如何推广销售“口语听力练习软件” 请问高手:怎样用JavaScrip实现漂浮物??? 为什么用playsound播放声音文件时应用程序就无法对其他时间做出响应,怎样解决该问题? 帮忙解决错误:Exception in thread "main" java.lang.NoClassDefFoundError: TestBed/class 用什么SQL语句可以将一个表里满足条件的记录复制到另一个结构相同的表里?(SQL-SERVER) 某烧杯装满水的总质量是350G.放入一块合金后,溢出一些水 这时质量为500G 取出合金后杯和水总质量为300G 求合金的密度 固体和液体的压强公式不一样 介电常数是什么? 合金的密度是多少 计算固体压力和压强和计算液体的压力和压强有什么相同点和不同点 窗户玻璃上的窗花纸怎样清除家里窗户玻璃上的窗花纸很久了,现在要清理,怎么清理不了,请问有经验的同志们帮帮我. 求合金密度.一块铜金合金,质量200g,体积20cm3,金密度19.3g/cm3,铜8.98g/cm3,分别求金铜体积别列方程,用浓度三角解. 液体压强和固体压强的共公式不是一样的么,有什么区别呀压强公式均可由基础公式:P=F/S推导P液=F/S=G/S=mg/S=ρ液Vg/S=ρ液Shg/S=ρ液hg=ρ液gh 古代,人们用纸贴在窗户上防风,现在人们用玻璃做窗户,比较玻璃和纸,玻璃有哪些 1 一个空杯子装满水水的总质量为500克 用它装满酒精能装多少克(酒精密度0.8×十的三次方千克每立方米)2 一个空杯子装满水总质量为1千克用它装另一种液体可以装1.2千克求这种液体的密 规则液体压强计算公式用固体压强公式为何答案不同看过一些解析说固体压强公式不适用于液体压强计算的原因是液体有可能装在不规则的容器中.但是当液体是装在一个柱状容器内时,应该 由于缺少玻璃,他们使用纸来遮盖窗子[  ],they used paper to cover the windows.(lack) 物理题初二密度与质量急用!1计算题某城市要雕塑一个历史人物大理石的全身像,所选择的模型质量为75kg,要塑的石像是模型高度的4倍,大理石的密度为2.7乘以10的三次方kg每立方米,试估算该大 为什么压强公式p=ρgh只适用于液体与气体 玻璃窗和纸窗比较有哪些优点 初二(关于质量、密度和体积)某个空心铜球,它的体积为60cm³,质量为445g.若将其中空心部分铸满铅,那么此球的质量是多大? 水对容器底部的压强公式是容器底部受到的压强公式,不是内部. 节约用纸有哪些好处? 有关质量与密度的国家标准规定以A0、A1、A2、B1、B2等标记来表示纸张幅面规格,以“克重”来表示纸张每平方米的质量.刘刚家新买回一包打印纸,包上标注着“A4 70 g 500 sheet 210×297mm”,意思 装水的容器在正放和倒放时对水平桌面的压力和压强 什么是搞玻璃大神们帮帮忙 1.容积为200毫升的杯中装有80克水,再在杯中放入每颗质量为15克的小石子24粒,水面正好升至杯口,那么小石子的密度多大?2.有一铁球质量是234克,体积是80平方厘米,问铁球是空心还是实心?如是空 算压强时,P=pgh,P=F/S的区别 .算水对容器压强 ,容器对桌面压强分别用哪个公式,还有容器不是柱状的时候,公式怎么用? 玻璃有什么含义 1.一个瓶子装满水,总质量700G,若向瓶中投入445G的某种金属碎片,溢出一些水,测得金属碎片,水,瓶子总质量是1095G,求金属碎片地密度.2.没有量筒,只有一个空瓶,一台天平和水,你能不能设法求食用 在盛水的容器中放一固体沉底,则容器对桌面的压强该怎样算?我老师说要加桌面对容器的支持力,因为作用力和反作用力 是怎么来的,指什么 是指密度吗? 比较容器对桌面、水对容器底部的压力以及水对容器底部的压强. 顺便问一下,液体内部压强能用公式F=P÷S这个公式计算吗? 谢谢 发现自己是男同性恋怎么办. 密度与重度的关系式是什么? 电介质的介电常数有单位吗? 发现自己是男同性恋,怎么办? 某图样密度为1.85g/m3,含水率34%,土粒比重为2.7%,求求土样饱和密度,饱和重度:要有公式,最好能带讲解,) 介电常数越大,电介质的导电性怎样 帮忙看看这是个什么东东,材质好像是石头的,有点像玉的感觉,但绝不是玻璃 千克单位换算?4810千克=多少斤?聚胺脂原液1斤多少双男鞋底? 介电常数反映的是物质的什么性质?是否可对其进行简要的说明? 冬天感觉玻璃比棉花冷,是因为玻璃温度更低吗 小明同学学习了密度知识人口后,对干密度公式 请问铜的电导率和相对介电常数分别是多少 搞玻璃什么意思 计算密度的公式是什么? 介电常数与电导率分别是代表什么?有什么关系?RT本人不吝啬分数哦 答案正确的我还会追加分数他们之间有什么关系,比如说在数学公式的运算方面 树脂玻璃是什么 请问纸的密度怎么算?计算公式是?暂时没分不好意思了, 一种物质的介电常数、电导率和磁导率有没有什么关系?理想导体的介电常数应该是多少? 什么是白玻璃 合金密度怎么求两种金属的密度分别为p1、p2,取质量相同的这两种金属做成合金,求这种合金的密度.(p1+p2)/2对不对啊 谁帮我解释下这个密度公式1.用天平测出固体质量m,用天平测出溢水杯装满水后的总质量m2,取下溢水杯将待测物体(一个固体)放入装满水的溢水杯中,水溢出后用天平测出溢水杯及杯中物体 等效介电常数与有效介电常数有什么区别?等效介电常数和有效介电常数有什么区别啊,好像书上也没说清楚啊. 合金密度问题有一种合金密度是1.2*10^3km/m^3,它是由下列物质中某两种物质组成的,根据下列组成合金物质的数据,判断组成此合金的两种金属可能是?1.金:19.3*10^3【密度】2.铅:11.3^10^3 【密度 速度是怎样定义的?密度是怎样定义的?定义式分别是什么? 【求助】介电常数和波长有关吗? 合金密度怎么算?甲、乙两金属的密度分别为(就当是那个希腊字母了)P甲、P乙,将等质量的甲、乙两金属制成合金,则合金密度为→答案是2P甲×P乙÷(P甲+P乙),为什么呢? 除了p=m/v以外的密度表达式 【请教】单晶硅的介电常数是多少? 题目是这样的,铅铁合金中铅的体积占五分之一,其余是铁,求合金的密度是多少?(p铅=11.3克/立方厘米,p铁=7.9克/立方厘米) 液体的压强计算为什么和固体不同?1、能具体解释一下“流动性”是怎么一回事吗?2、既然p=Pgh为什么将一个装满水的矿泉水瓶正方与倒放对地面压强不相等?不是与底面积无关吗? 物体介电常数受外界环境影响么
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn