Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];

Вниз

Использование DLL написанной на С++   Найти похожие ветки 

 
Ricko ©   (2004-11-25 16:47) [0]

Срочно понадобилось управлять микшером звуковой карты ECHO MIA. Управление стандартным микшером она (карта) обходит используя свою консоль управления. Нашел в инете пример на с++ . Так как я абсолютно не разбираюсь в с++ решил запихать основные функции в dll, а уж в своем приложении на Delphi их использовать. Но при передачи значения параметров функций в Delphi не соответствуют значениям параметрам в dll. Вместо них какой то мусор. Знатоки с++ укажите на ошибки.

bmix.cpp ->

#include <vcl.h>
#include "CSplunge.h"
#include "CSplungeList.h"
#pragma hdrstop
//----------
USEUNIT("CSplunge.cpp");
USEUNIT("CSplungeList.cpp");
//----------
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
{
       return 1;
}
//----------

CSplungeList *pSplungeList;
CSplunge *pSplunge;

__declspec(dllexport) int InitMyMixer(void)
{
pSplungeList = new CSplungeList;
if (0 == pSplungeList->GetNumSplunges())
{
        delete pSplungeList;
        return 0;
}

pSplunge = pSplungeList->GetNthSplunge(0);
pSplunge->OpenDriver();
pSplunge->OpenMixer();

return 42;
}

__declspec(dllexport) int CloseMyMixer(void)
{
     delete pSplungeList;
return 0;
}

__declspec(dllexport) char *GetCardName(void)
{
if (pSplungeList)
{
   ECHOGALS_CAPS *pCaps = pSplunge->GetCaps();
          return pCaps->szName;
}
return "None";
}

__declspec(dllexport) int GetVolume(Word iBus0,Word iBus1)
{
        int iGain;
        ShowMessage("Input param> iBus0: "+IntToStr(iBus0)
                  +"iBus1: "+IntToStr(iBus1));
        pSplunge->GetMonitorGain(iBus0,iBus1,iGain);
        return iGain;
}

__declspec(dllexport) int GetMute(Word iBus0,Word iBus1)
{
        int iGain;
        ShowMessage("Input param> iBus0: "+IntToStr(iBus0)
                  +"iBus1: "+IntToStr(iBus1));
        pSplunge->GetMonitorMute(iBus0,iBus1,iGain);
        ShowMessage("Get mute: "+IntToStr(iGain));
        return iGain;
}

__declspec(dllexport) int SetVolume(Word iBus0,Word iBus1, int iGain)
{
        pSplunge->SetMonitorGain(iBus0,iBus1,iGain);
        return 0;
}

__declspec(dllexport) int SetMute(Word iBus0,Word iBus1, int iMute)
{
        BOOL b;
        ShowMessage("Set mute: "+IntToStr(iMute));
        if (iMute == 0)  b=false; else b=true;
        pSplunge->SetMonitorMute(iBus0,iBus1,b);
        return 0;
}


main.pas

var
 Form1: TForm1;

 function InitMyMixer : integer; external "bmix.dll" name "@InitMyMixer$qv";
 function CloseMyMixer : integer; external "bmix.dll" name "@CloseMyMixer$qv";

 function GetCardName : PChar; external "bmix.dll" name "@GetCardName$qv";

 function GetVolume(bus0,bus1:word):integer; external "bmix.dll" name "@GetVolume$qusus";
 function GetMute(bus0,bus1:word):integer; external "bmix.dll" name "@GetMute$qusus";

 function SetVolume(bus0,bus1:word;Gain:integer):integer; external "bmix.dll" name "@SetVolume$qususi";
 function SetMute(bus0,bus1:word; Mute:integer):integer; external "bmix.dll" name "@SetMute$qususi";


 
Digitman ©   (2004-11-25 16:56) [1]

соглашения о вызовах тобой явно нарушены.

не бурусь утверждать, но либо stdcall (наиболее вероятно) либо cdecl (менее вероятно)



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.045 c
14-1100831566
ИМХО
2004-11-19 05:32
2004.12.12
Роман с камнем, мелодия


1-1101501257
alo
2004-11-26 23:34
2004.12.12
преобразование Variant в TGUID и наоборот


3-1100407797
lav
2004-11-14 07:49
2004.12.12
Как получить список запросов из базы MS Access


1-1101455243
msm
2004-11-26 10:47
2004.12.12
Запись текста в файл


1-1101674331
Bobby Digital
2004-11-28 23:38
2004.12.12
Код виндовса ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский