I have a fairly extensive C++ project that I am using. Just for kicks, I thought I would try the very simple example of swig which uses just the header from the project to build a python module.
Swig ran properly and created a project_wrap.cxx file. However, when I try to compile and link that file with the rest of my project, I am running into errors:
It seems they are mostly related to the MS COLeDateTime:
Error 14 error C2061: syntax error : identifier 'COleDateTime'
resulting from declarations such as:
void SetStartTime (COleDateTime dt ) {m_simstart_time = dt; }
Or from IntelliSense:
194 IntelliSense: identifier "COleDateTime" is undefined
I presume the workaround is to work with the windows.i file, but does anyone have some tips/experience/examples for this?
Add
%{
#include "the_coledatetime_header.h" // whatever the header is
%}
to your .i
The #include will be added to you project_wrap.cxx & should compile.
Check http://www.swig.org/Doc2.0/SWIGDocumentation.html#Preprocessor_delimiters for more info.
Related
I want to make a Google Chrome plugin that use Twain to remote control a Digital Camera.
I want this to run on Windows and I'm using Visual Studio Express 2012 C++.
I have this sample for NPAPI and this sample of CppWrapper for Twain which has 3 interesting files (TwainCpp.cpp TwainCpp.h twain.h)
Before doing anything, I want to merge these two projects.
First step: putting twain.h in the npsimple project which failed, twain.h errors caught.
Second step: putting CppTwain in npsimple, which also failed because twain.h "contains" errors.
Problem is that when I create an empty project, and put twain.h in it, there is no error! So I tried to put npsimple files in that empty project, and this time I get error from npsimple files..
Error type :
I have this code in twain.h :
#ifdef _MSWIN_
typedef HANDLE TW_HANDLE;
typedef LPVOID TW_MEMREF;
and I get plenty of errors like :
error C2146: syntax error : missing ';' before identifier 'TW_HANDLE'
How can I merge these projects?
HANDLE is an unspecified type because you don't include anything that is specificing it. You'll want to include windows.h.
Obviously there is no error when you add only the twain.h header file to the empty project - you haven't added any sources to compile, hence there can be no compilation errors.
I'm trying to create a Visual Studio project for code that contains
DL_EXPORT(void) initlua(void);
So I basically need a macro like
#define DL_EXPORT(retVal) __declspec(dllexport) retVal
Which works, but is OS/Compiler-specific, so I want to put that in the project*. But I can't figure out what to put in Properties -> C/C++ -> Preprocessor -> Preprocessor Definitions (or in the Command Line) to do that. I'd think either of these would work:
DL_EXPORT(retVal) __declspec(dllexport) retVal
DL_EXPORT(retVal)=__declspec(dllexport) retVal
I'm leaning towards the latter, but neither seems to work - when compiling I get these errors:
error C2061: syntax error : identifier 'initlua'
error C2059: syntax error : ';'
error C2059: syntax error : 'type'
And compiling with /P to get the preprocessor result explains why: Nothing happened, so the compiler interpreted it as int DL_EXPORT(void) and expects a ;.
What is the right syntax for the definition? Or is there none, as people in this question assumed?
Thanks.
* I'm not using a simple #ifdef-check for MSVC because I'm just trying to create a Visual Studio project for an existing library (lunatic python) with existing build scripts that I don't want to break. Although I could admittedly use #ifndef DL_EXPORT - but I'd still like to know if I'm missing something or if this is just impossible to do in Visual Studio.
I think it should be possible to use /FI on the commandline to specify an include file to include automatically in every source file. In that file you put the #define statements you need.
My issue is this, every time that I compile my program which includes the MSR_NUIAPI.h, the compiler spits out a missing ';' before the INUIInstance interface declaration. I read this article(http://social.msdn.microsoft.com/Forums/en-ca/kinectsdknuiapi/thread/01b954d2-4095-4b2b-8713-7b47843d8752) which says that I have to include windows.h file before the MSR_NUIAPI.h, however I already have it included before, and I really doubt that this is an actual syntax mistake. IntelliSense(I'm using VS Studio Ultimate) however says that 'interface' is not defined.
Thank You
Try including #include <ole2.h> after #include <windows.h>.
Also, MSR_NuiApi.h was included in the beta distribution and is not part of the v1.0 SDK. Its now just NuiApi.h.
Download Kinect SDK v1.0
I am compiling quite an old code using MS Studio 8 and getting quite an annoying error:
error MIDL2025 : syntax error : expecting an interface name or DispatchInterfaceName or CoclassName or ModuleName or LibraryName or a type specification near "exception".
It is an *.idl:
#ifndef __UserCORBAException_IDL__
#define __UserCORBAException_IDL__
exception UserCORBAException {
string xml;
};
#endif//__UserCORBAException_IDL__
It compiles using Studio 6.
It looks like you are compiling CORBA IDL with the Microsoft IDL compiler. They are separate languages, they just use the same file extension.
I assume you are importing an existing project, and you have accepted the suggested tool to compile the file, however it is the wrong tool.
You need to use the CORBA IDL compiler.
I'm trying to use iphlpapi (GetAdapterInfo) and am having trouble compiling the code. I have iphlpapi.h from SDK 7 and have added the appropriate path to the include files in visual studio.
I get the following error...
c:\program files\microsoft sdks\windows\v7.0\include\ifdef.h(154) : error C2146: syntax error : missing ';' before identifier 'NET_IFTYPE'
The lines in ifdef where this occurs are shown below.
typedef NET_LUID IF_LUID, *PIF_LUID;
typedef ULONG NET_IFINDEX, *PNET_IFINDEX; // Interface Index (ifIndex)
typedef UINT16 NET_IFTYPE, *PNET_IFTYPE; // Interface Type (IANA ifType)
I finally figured out how to get this to work so I'm putting this here for others who might stumble upon it.
First, I'm using visual c++ version 6.0 with the 2003 sdk. I added the sdk as the first choice using TOOLS->OPTIONS->DIRECTORIES. Adding the include winsock2.h caused about 60 redefinition errors. I found several sources telling me that the winsock2 include had to precede the windows.h include. My windows.h include was generated for me by VC++ in the precompiled header stdafx.h so I moved the winsock2.h include there. I now can compile and run my program!
According to this page, it looks as though you might need to make sure winsock2.h is included first. I'm guessing that it defines some of those types.
Also, the MSDN page for NET_LUID says it requires Vista at a minimum. Make sure that's true.