If you have MinGW or c++ installed, maybe this will work.
Code: Select all
function savefile(filename As String,p As String) as string
Dim As long n=freefile
If Open (filename For Binary Access Write As #n)=0 Then
Put #n,,p
Close
Else
Print "Unable to save " + filename:sleep:end
End If
return filename
End function
Function loadfile(file as string) as String
dim as long f=freefile
if Open (file For Binary Access Read As #f)=0 then
Dim As String text
If Lof(f) > 0 Then
text = String(Lof(f), 0)
Get #f, , text
End If
Close #f
return text
else
Print file;" not found":Sleep:end
end if
end Function
sub getmangledname(cppproc as string)
kill "mangle.o"
savefile("mangle.cpp",cppproc)
print "From file, c++ function name: ";
print loadfile("mangle.cpp")
shell "g++ -c " +curdir+ "\mangle.cpp "
var f= loadfile("mangle.o")
var m= mid(f,instr(f,"_Z"))
var dist=instr(m,chr(0))
m=mid(m,1,dist)
print "From .o file, mangled name: ";
print m
kill "mangle.cpp"
kill "mangle.o"
end sub
dim as string cppproc="void dummy(char*, int&, int&){};" '<<---- c++ function
getmangledname(cppproc)
print
cppproc="double multiply(double,double){return 0;};"
getmangledname(cppproc)
print
cppproc="int* mangletester(char*,double&,long long){return 0;};"
getmangledname(cppproc)
print
sleep
'print f
My result:
Code: Select all
From file, c++ function name: void dummy(char*, int&, int&){};
From .o file, mangled name: _Z5dummyPcRiS0_
From file, c++ function name: double multiply(double,double){return 0;};
From .o file, mangled name: _Z8multiplydd
From file, c++ function name: int* mangletester(char*,double&,long long){return 0;};
From .o file, mangled name: _Z12mangletesterPcRdx