0

  MSVCプロジェクトでlibsndfile-1.dllを機能させるのに問題があります。コードから呼び出すことで、ライブラリをロードし、dllからバージョン文字列を取得できますsf_command()sf__open()ただし、 SNDFILEポインタを返すことができないようです。

また、FILEポインタを返すこともできないことに気づきましたfopen()(おそらくこれは関連していると思いますが、 !?sf_open()を使用していると思います)。fopen()

私はMSVC、C / C ++、およびWindows全般にかなり慣れていないので、おそらく本当に明白な何かが欠けています。

私のmain.cppは次のようになります:

#include <windows.h>
#include <stdio.h>

#include "sndfile.hh"

// create some function pointers to point to the dll function addresses
// I'm winging this a bit. hopefully it's right!? seems to work!
typedef int (*SF_COMMAND)(SNDFILE*, int, void*, int); 
typedef SNDFILE* (*SF_OPEN)(const char*, int, SF_INFO*); 

int main()
{
    // dll handle
    HINSTANCE hDLL = NULL;

    // create some vars to store the dll funcs in
    SF_COMMAND     sf_command;
    SF_OPEN        sf_open;

    // load the dll
    hDLL = LoadLibrary(L"libsndfile-1.dll");

    // check the dll loaded
    if( NULL == hDLL )
    {
        printf("Error, Could not load library \n");
        return 1;
    }

    // get the dll funcs
    sf_command = (SF_COMMAND)GetProcAddress(hDLL, "sf_command");
    sf_open = (SF_OPEN)GetProcAddress(hDLL, "sf_open");

    // check we got the funcs
    if(!(sf_command && sf_open)){
        printf("Error exporting dll functions \n");
        return 2;
    }

    // all good so far!
    // try the first function
    char* version_string[sizeof(char*)*4];
    int res = sf_command(NULL, SFC_GET_LIB_VERSION, &version_string, sizeof(version_string));

    if(res){
        // all good!
        printf("Version: %s \n", version_string);
    }

    // now try and create a SNDFILE pointer
    SF_INFO info;
    SNDFILE* sfp = sf_open("c:\\Godspeed.aif", SFM_READ, &info);

    if(sfp){
        printf("Hurray! successfully opened the SNDFILE!! \n");
    }else{
        printf("Doh! couldn't open the SNDFILE!! \n");
        // Grr!!
        return 3;
    }

    return 0;
}

プロジェクトはコード3でビルドおよび終了します(ファイルを開くことができませんでした!(ファイルがそこにあると確信しています!!))。

exeを実行すると、出力は次のようになります。
Version: libsndfile-1.0.17
Doh! couldn't open the SNDFILE

私がどこで間違っているのかについて誰かが何か提案がありますか?


ジョシュ、どうもありがとう。

4

1 に答える 1

0

うーん、私は本当に夜遅くにフォーラムに投稿しないことを学ぶ必要があります! 今朝もう一度試してみたところ、数分以内にファイルが開かれました。私は自分のパスをすべて間違っていました (これらの奇妙な Windows パスに慣れていません)! 相対パスでビンゴしてみた!それが誰かを助けることを願っています!

于 2009-10-06T08:58:46.960 に答える