ネイティブC++からManaged C++への多数の.hおよび.libファイルの移植に取り組んでおり、最終的にはC#で参照される.dllとして使用されます。ネイティブC++からマネージC++へのC#
.NETにすべてのものを移植するのはずっと簡単ですが、もしできれば可能ですか?それはサードパーティーで、私が持っているのは.lib(エクスポートなし)と.hファイルです。
仮想機能を使用するまではすべてがスムーズに進みましたが、現在は代議員の問題が発生しています。私は取得していますエラーの中で
は以下のとおりです。
エラーC3756: 'ThreadFunc':既存のシンボルで定義の競合を委任
エラーC2079: 'MyWrapTest :: MyThreadWrap :: m_threadAttrは、' 未定義のクラスを使用しています'MyWrapTest :: MyThreadAttrWrap' エラーC2664: 'MyWrapTest :: AutoPtr :: AutoPtr(T *)':からパラメータ1を変換することはできません 'MyWrapTest :: MyThreadAttrWrap'
'MyThread *' に明確にするために、Iネイティブコードと、私が作業しているものを含めるw。まず、ネイティブコード:
#ifndef MYTHREAD_HPP
#define MYTHREAD_HPP
#ifdef WIN32
#include <winsock2.h>
#include <windows.h>
#define STDCALL unsigned __stdcall
typedef unsigned (__stdcall *ThreadFunc)(void*);
#else
#define STDCALL void*
typedef void* (*ThreadFunc)(void*);
typedef unsigned int HANDLE ;
#endif
#include "generaltypes.hpp"
class MyThreadAttr;
class MyThread
{
public:
MyThread(void);
MyThread(MyThreadAttr * tta);
virtual ~MyThread() {};
virtual HANDLE start(ThreadFunc,void *, unsigned *);
virtual int stop();
static void wait(HANDLE);
#ifdef WIN32
static void wait(HANDLE, int);// msec timeout required since 'cancelThread' is no-op
#endif
static void sleep(unsigned int);
static int32 cancelThread(HANDLE hThread); // no-op on Windows (returns -1)!
#ifndef WIN32
static void setCancelStates(void);
static void endProcess();
#endif
protected:
MyThreadAttr * m_threadAttr;
void setThreadAttr(MyThreadAttr * tta);
};
#endif
AND NEW STUFFは、私が開発しています:あなたは再びコンストラクタでm_NativeMyThreadを定義するのはなぜ
#pragma once
#ifdef WIN32
#include <winsock2.h>
#include <windows.h>
#define STDCALL unsigned __stdcall
//typedef unsigned (__stdcall ThreadFunc)(Object^);
#else
#define STDCALL Object^
typedef unsigned int HANDLE;
#endif
#include "gentypes.hpp"
#include "AutoPtr.h"
#include "MyThread.hpp"
using namespace System;
using namespace System::Runtime::InteropServices;
namespace MyWrapTest
{
public delegate Object^ ThreadFunc(Object^ o);
ref class MyThreadAttrWrap;
//#include "MyThreadAttrWrap.h"
public ref class MyThreadWrap
{
public:
MyThreadWrap(void)
{
AutoPtr<MyThread> m_NativeMyThread(new MyThread);
};
MyThreadWrap(MyThreadAttrWrap tta)
{
AutoPtr<MyThread> m_NativeMyThread(tta);
};
/*virtual ~MyThreadWrap(){};
virtual HANDLE start(ThreadFunc,System::Object^, unsigned ^);
virtual int stop();*/
static void wait(HANDLE h)
{
m_NativeMyThread->wait(h);
};
#ifdef WIN32
static void wait(HANDLE h, int i) // msec timeout required since 'cancelThread' is no-op
{
m_NativeMyThread->wait(h, i);
};
#endif
static void sleep(unsigned int i)
{
m_NativeMyThread->sleep(i);
};
static int32 cancelThread(HANDLE hThread); // no-op on Windows (returns -1)!
#ifndef WIN32
static void setCancelStates(void);
static void endProcess();
#endif
protected:
MyThreadAttrWrap m_threadAttr;
void setThreadAttr(MyThreadAttrWrap tta);
private:
AutoPtr<MyThread> m_NativeMyThread;
};
}
あなたのコードをすべてハイライトし、メニュー上部の0101ボタンを押してください。 – jkeys