D to C++ DLL
Harpo
roederharpo at hushmail.com
Thu Mar 13 08:25:24 PDT 2014
Hello all! I am having trouble with using a c++ shared object
file with D.
I am running Linux Mint 32 bit. I am using the 32 bit version of
DMD.
For some reason any extra variables I pass to the C++ function
have the value 0.
Even when I specifically pass it something else.
------------------------------------------------
D source:
import core.stdc.stdio;
import core.stdc.stdlib;
import core.sys.posix.dlfcn;
int main() {
void *lh = dlopen("libdll.so", RTLD_LAZY);
extern(C) long function(long y, long x) fn = cast(long
function(long y, long x))dlsym(lh, "dll");
fn(1, 71);
return 0;
}
C++ source:
#include <stdio.h>
extern "C" long dll(long y, long x) {
if(y == 0){
//int myint = (int) x;
// printf("%c", myint);
printf("test1: ");
printf("%ld", x);
}
else if(y == 1){
printf("test2: ");
printf("%ld", x);
}
else if(y == 2){
printf("test3: ");
//return getchar();
}
return 0;
}
Compile script:
g++ -c dll.cpp -fpic
g++ -shared -o libdll.so dll.o
dmd -c main.d
dmd main.o -L-ldl -L-rpath=.
./main
-------------------------------
Does anyone here know why this is the case, or how I can fix it?
Thanks!
More information about the Digitalmars-d-learn
mailing list