Erreur édition de lien LNK2019 et LNK2001
Bonjour,
J'essaye d'intégrer une application à une autre application. j'ai donc copier mes fichiers de la première application à la seconde. J'ai corrigé plusieurs problèmes mais il me reste ces erreurs à l'édition de liens :
Code:
1 2 3 4
| 1>NVAPIExample.obj : error LNK2019: symbole externe non résolu "long __cdecl GetInterface(struct IUnknown *,void * *)" (?GetInterface@@YAJPAUIUnknown@@PAPAX@Z) référencé dans la fonction "protected: virtual long __stdcall BaseObj::QueryInterface(struct _GUID const &,void * *)" (?QueryInterface@BaseObj@@MAGJABU_GUID@@PAPAX@Z)
1>NVAPIExampleDlg.obj : error LNK2001: symbole externe non résolu "long __cdecl GetInterface(struct IUnknown *,void * *)" (?GetInterface@@YAJPAUIUnknown@@PAPAX@Z)
1>PagePreview.obj : error LNK2001: symbole externe non résolu "long __cdecl GetInterface(struct IUnknown *,void * *)" (?GetInterface@@YAJPAUIUnknown@@PAPAX@Z)
1>Debug/Amisco Organizer.exe : fatal error LNK1120: 1 externes non résolus |
Pour la première je peux donner le code du fichier BaseObj.h. Pour les autres je ne sais pas d'où elles sortent.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| #ifndef BASEOBJ_H
#define BASEOBJ_H
HRESULT GetInterface(LPUNKNOWN pUnk, void **ppv);
class BaseObj: public IUnknown
{
protected:
BaseObj(): m_refCount(1) {}
virtual ~BaseObj() {}
STDMETHODIMP QueryInterface(REFIID riid, void** ppv)
{
if (riid == IID_IUnknown)
return GetInterface(static_cast<IUnknown*>(this), ppv);
else
return InternalQueryInterface(riid, ppv);
}
STDMETHODIMP_(ULONG) AddRef() { return InterlockedIncrement((LONG*)&m_refCount); }
STDMETHODIMP_(ULONG) Release() { ULONG r = InterlockedDecrement((LONG*)&m_refCount); if (r) return r; delete this; return 0; }
virtual HRESULT InternalQueryInterface(REFIID riid, void** ppv) { return E_NOINTERFACE; }
ULONG m_refCount;
};
#define IMPL_IUNKNOWN \
STDMETHODIMP QueryInterface(REFIID riid, void** ppv) { return BaseObj::QueryInterface(riid, ppv); } \
STDMETHODIMP_(ULONG) AddRef() { return BaseObj::AddRef(); } \
STDMETHODIMP_(ULONG) Release() { return BaseObj::Release(); }
#define IMPL_INTERFACE(IFNAME) \
HRESULT InternalQueryInterface(REFIID riid, void** ppv) \
{ \
if (riid == __uuidof(IFNAME)) \
return ::GetInterface(static_cast<IFNAME*>(this), ppv); \
else \
return BaseObj::InternalQueryInterface(riid, ppv); \
}
#endif |
Quelqu'un aurait une piste au niveau des options de Visual à choisir ? Ou sur ce bout de code ?
Merci,
Sly
Erreur LNK 2019 LNK 1120 avec JNI
Bonjour,
je rencontre également la meme erreur. et j'ai regardé sur le site de microsoft. J'avoue j'y pige rien.
Je cherche à utiliser plusieurs méthode d'une classe java via une methode C++. La solution la plus simple d'apres les forum est JNI. Lors de la Creation de la JVM je rencontre cette erreur qui me donne envie de manger mon clavier.:evilred:
Mon environnement:
Windows XP Pro 64 bit
Visual Studio Team system 2008 (Visual studio 2008)
JDK 1.6.10
J'ai ajouté les path pour trouver le fichier jni.h
J'ai ajouté le path pour trouver la lib JVM.lib
code C++ toto.cpp
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
#include <iostream>
#include "toto.h"
#include <jni.h>
using namespace std;
#define USER_CLASSPATH "C:\\Documents and Settings\\pb3\\workspace\\Test\\bin" /* where Prog.class is */
#pragma comment(lib, "jvm.lib")
void toto::essai()
{
cout << "Hello World!\n";
}
void toto::CreateJVM()
{
JavaVM *jvm; /* denotes a Java VM */
JNIEnv *env; /* pointer to native method interface */
JavaVMInitArgs vm_args; /* JDK 1.1 VM initialization arguments */
jclass cls;
jmethodID mid;
JavaVMOption options[1];
options[0].optionString =
"-Djava.class.path=" USER_CLASSPATH;
vm_args.version = 0x00010002; /* New in 1.1.2: VM version */
vm_args.options = options;
vm_args.nOptions = 1;
vm_args.ignoreUnrecognized = JNI_TRUE;
//vm_args.classpath = ...;
/* load and initialize a Java VM, return a JNI interface
* pointer in env */
JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
/* invoke the Main.test method using the JNI */
cls = (*env).FindClass("JVMtest");
mid = (*env).GetStaticMethodID(cls, "main", "(I)V");
(*env).CallStaticVoidMethod(cls, mid, 100);
/* We are done. */
(*jvm).DestroyJavaVM();
}
int main()
{
toto a;
a.essai();
a.CreateJVM ();
} |
code Java JVMtest.java
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
public class JVMtest {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("Sitting on top the world");
}
} |
error LNK2019: unresolved external symbol __imp__JNI_CreateJavaVM@12 referenced in function "public: void __thiscall toto::CreateJVM(void)" (?CreateJVM@toto@@QAEXXZ) toto.obj
fatal error LNK1120: 1 unresolved externals C:\Documents and Settings\pb3\My Documents\Visual Studio 2008\Projects\JVM\Debug\JVM.exe