DATA Step, Macro, Functions and more

Calling C++ DLL from SAS

Reply
Occasional Contributor
Posts: 7

Calling C++ DLL from SAS

Hi,

 

I have tried one method of calling a C++ dll created in Visual Studio 2010.

 

myexceldll.cpp

int __stdcall myPower(int myValue)
{
return myValue * myValue;
}

 

 

 

defFile.def

LIBRARY "myExcelDll"
EXPORTS
myPower @1

 

 

When trying to load the dll in SAS Enterprise guide 5.1 or even in SAS foundations 9.3 I get the following error

 

15 %let root=E:\C++\myExcelDll\Release;

16 libname lib "&root";

NOTE: Libref LIB was successfully assigned as follows:

Engine: V9

Physical Name: E:\C++\myExcelDll\Release

17

18 proc proto package=lib.Proto_ds.cfcns stdcall;

19 link '&root\myExcelDll.dll';

20

21 run;

WARNING: STDCALL option is only supported on the PC platform.

ERROR: Unable to load 'myExcelDll.dll'.

ERROR: Extension nicht gefunden: &root\myExcelDll.dll

ERROR: Extension nicht gefunden: myExcelDll.dll

ERROR: Extension nicht gefunden: myExcelDll.dll

ERROR: Datei LIB.PROTO_DS kann nicht aktualisiert werden. Die Codierung stimmt nicht mit der Codierung der Sitzung überein, oder

die Datei besitzt das systemeigene Format eines anderen Hosts, z.B. WINDOWS_64.

NOTE: PROZEDUR PROTO used (Total process time):

real time 0.04 seconds

cpu time 0.03 seconds

 

 

Any idea what the warning means? I am working on a Windows platform and both Enterprise guide and Foundations are installed on Windows.

Another issue I looked at was that SAS Foundations was 64 bit whereas my code is a Win32 dll. So I tried to compile with gcc using 64 bit settings and I still get the same error.

Super User
Super User
Posts: 7,980

Re: Calling C++ DLL from SAS

Sorry, no, never found a reason to call C++ dll's (and can be quite dangerous if you don't know what your doing).  Why are you needing to do this?  SAS offers all the functionality you could need, the only reason I could think of is a historical program that is a requirement, otherwise just do it in SAS, or do it in C++, no need for both.

Occasional Contributor
Posts: 7

Re: Calling C++ DLL from SAS

Yep, I could do it in either. Just an academic question rather.

Super Contributor
Posts: 441

Re: Calling C++ DLL from SAS

In your statement 

 

link '&root\myExcelDll.dll';

you are using single quotes. Therefore &root will not be resolved. Use double quoutes and you will be in much better shape.

 

link "&root\myExcelDll.dll";

 

Regards, Jan.

Occasional Contributor
Posts: 7

Re: Calling C++ DLL from SAS

Posted in reply to jklaverstijn

Thanks Jan. Tried it, and now reveals another error. i.e. not a valid Win32 application.

 

I ran this code on SAS Foundations 64 bit in windows. The dll is compiled 32 bit. I am confused now.

 

1. This error is stated after the "Unable to load 'myExcelDll.dll' error. So is SAS able to read the dll and find that its not a valid Win32 application thus throwing the 2 errors?

2. The dll was compiled as 32 bit. Still why does SAS complain?

2. The first warning of STDCALL option being supported only on PC platform (which I assume means Windows??). If it does then this warning does not make sense since I am running SAS on Windows.

 

WARNING: STDCALL option is only supported on the PC platform.
ERROR: Unable to load 'myExcelDll.dll'.
ERROR: Fehler beim Laden der Extension: OS-Fehler: 193 (E:\C++\myExcelDll\Release\myExcelDll.dll
is not a valid Win32 application.)
ERROR: Extension kann nicht geladen werden: (E:\C++\myExcelDll\Release\myExcelDll.dll)
ERROR: Extension nicht gefunden: myExcelDll.dll
ERROR: Extension nicht gefunden: myExcelDll.dll
NOTE: Prototypes saved to LIB.PROTO_DS.CFCNS.
NOTE: PROCEDURE PROTO used (Total process time):
      real time           0.05 seconds
      cpu time            0.04 seconds
Super User
Super User
Posts: 7,980

Re: Calling C++ DLL from SAS

You have typed your answer there, you are trying to run a 32bit compilation on a 64bit system.  Some information (it wont solve your problem, but may explain it):

https://blog.mattmags.com/2007/06/30/accessing-32-bit-dlls-from-64-bit-code/

 

Ask a Question
Discussion stats
  • 5 replies
  • 319 views
  • 0 likes
  • 3 in conversation