DerelictVorbis and string pointer
ANtlord
antlord92 at gmail.com
Sun Jun 24 01:26:48 UTC 2018
Hello D community!
I'm developing an application that must work on audio especially
playback Ogg files. So I took library DerelictVorbis [0] testing
basic functions like `ov_fopen`. The tests were successful so I
decided to implement core components of the application using D
and Derelict libraries.
Today I encountered a problem, the `ov_fopen` returns -1 instead
of 0. It means that something goes wrong and the file that is
pointed by a string is not opened. I figured out it so there is
the error is not occurred when a file path is pointed by a string
variable from CLI input arguments but it is occurred when the
path is pointed by a string variable filled dynamically (for
example file path is read from another file).
Here code goes
public import derelict.vorbis;
public import derelict.vorbis.file;
void main(string[] args) {
DerelictVorbis.load();
DerelictVorbisFile.load();
OggVorbis_File _ovFile;
immutable filepath = args[1];
import std.file;
import std.string;
string filepath2 = "./name.txt".readText.strip;
assert(filepath2 == filepath);
int res = ov_fopen(filepath2.ptr, &_ovFile); // res == -1
// int res = ov_fopen(filepath.ptr, &_ovFile); // res == 0
assert(res == 0, "ov_fopen returns %d".format(res));
}
Actually I get it worked replacing `string filepath2` by `char[]
filepath2` but filepath is string still and it works correctly.
So what detail The devil is in? Is there an issue in
DerelictVorbis or in compiler. Don't I know something about
implementation of strings or pointers in D?
Thanks in advance!
DMD 2.080
DerelictVorbis 2.0.0-beta.2
[0] https://github.com/DerelictOrg/DerelictVorbis
More information about the Digitalmars-d-learn
mailing list