I have written a DLL with a bunch of different procedures and functions using Delphi. There is one function within this DLL that I want to overload, but as soon as I do, I get a host of errors on all the exports statements “E2191 EXPORTS allowed only at the global scope” The function I’m trying to overload is not part of any class. Here are the function declarations and code:
function qbRotateLeft(value: byte; shift:byte; RotateBits: byte) : byte; overload;
function qbRotateLeft(value: word; shift:byte; RotateBits: byte) : word; overload;
function qbRotateLeft(value: dword; shift:byte; RotateBits: byte) : dword; overload;
function qbRotateLeft(value: qword; shift:byte; RotateBits: byte) : qword; overload;
var
temp1 : variant; // declare local variable temp1 as qword (64-bit)
begin
// make sure the shift value > 0 and <= RotateBits
if (shift>0) or (shift<=(RotateBits-1)) then
begin
// temp1 = shift and RotateBits-1
temp1:=(shift and RotateBits-1);
// if temp1 is zero, then there is nothing to do
// return the original value
if temp1 = 0 then qbRotateLeft:=value;
// otherswise return
// (value shifted left shift) or'd (value shifted right by
// (RotateBits-shift))
qbRotateLeft:=(value shl shift) or (value shr (RotateBits-shift));
end
else
// shift value <= 0 or >= RotateBits, return zero
qbRotateLeft:=0;
end;
The exports statement are located within the global space just before the end of the file, yet every single one has the error as mentioned above (I’m only showing the overloaded exports).
exports qbRotateLeft(value: byte; shift:byte; RotateBits: byte); overload;
exports qbRotateLeft(value: word; shift:byte; RotateBits: byte); overload;
exports qbRotateLeft(value: dword; shift:byte; RotateBits: byte); overload;
exports qbRotateLeft(value: qword; shift:byte; RotateBits: byte); overload;
exports qbDLLVersion;
begin
end.
Everything worked and compiled just fine prior to adding the overload function statements. In fact, if you comment out the (3) additional function statements below the first and remove the word “overload” from the first function statement, everything goes back to normal and the library compiles without errors. I’ve read documentation on overloading functions, some says what I did is valid, but other sources say it should be defined in a class. It’s very possible I’m not using the overload functionality correctly and if that is the case any helpful suggestions would be greatly appreciated. Thanks.