Torque的VS2005编译 (compiling Torque by VS2005)

Torque游戏引擎QQ群成员文章:(←迷离的猫→,QQ:613101)
Ntoe: maybe you know how to compile Torque by VS2003 or VC6, But what about VS2005,the following is the 'How'.

Torque:http://www.gamaura.com/Soft/2006/200603/12.html
VS2005:emule 上面 Team Suite edition

昨天下载到一个Torque,一把源代码。这个我喜欢 :) 赶紧下下来,用Visual Studio 2005来编译。首先,使用vs2005打开torque/vc7/Torque SDK.sln,根据提示升级解决方案,然后编译。以下就是碰到的错误。

1、char * 与const char*的转换问题
这个问题出现在dStrstr函数中:
char* dStrstr(const char *str1, const char *str2)
{
   return strstr(str1,str2);
}
然而,strstr返回的是const char*。而编译器不允许char * 隐性转换到const char*。
所以,强制转换。

2、typedef问题
出错文件:winnt.h
出错行:typedef void *POINTER_64 PVOID64;
解决:这里是这样的,POINTER_64是一个宏,在64位编译下起作用,它包含在SDK目录下的BASETSD.H中,不幸的是,torque自己带了一个basetsd.h,里面没有定义POINTER_64,从而导致出错。改名,或删除该文件即可。


3、缺少resource.h文件
出错文件:resource.rc
提示:缺少resource.h文件
解决:在vc6目录下拷贝一个resource.h到vc7目录下即可。

4、操作符重载问题
出错文件:DTSMatrix.h中
出错行:template <int rows2, int cols2>
operator *= (const Matrix<rows2,cols2,type> &a) { (*this) = (*this) * a ; }
解决:
template <int rows2, int cols2>
   Matrix<rows,cols2,type>
operator *= (const Matrix<rows2,cols2,type> &a) { (*this) = (*this) * a ; }

5、小问题
一个i定义位置不对,看官自己解决了:)

现在通过以上步骤,虽然warning一把,不过,能编译通过了 :)让我感觉奇怪的是,不知道这是不是由VC7升级到VC8里面出的问题。还望高手指点。

在排错过程中受到清澜,南斗的指点,非常感谢 :)

日期:2006.06.16
来自:withyourmark

Build started: Project: Temple *** Using Compiler 'V5.06 update 6 (build 750)', folder: 'D:\Keil\ARM\ARMCC\Bin' Build target 'Target 1' compiling main.c... E:\Temple\USER\main.c(2): error: #5: cannot open source input file "can.h": No such file or directory #include "can.h" E:\Temple\USER\main.c: 0 warnings, 1 error "E:\Temple\Temple.axf" - 1 Error(s), 0 Warning(s). Target not created. Build Time Elapsed: 00:00:01#ifndef __CAN_H #define __CAN_H #include "stm32f4xx.h" // Device header void CAN1_Init(void); void CAN_Send_Voltage_Command(uint8_t motor_id,int16_t voltage); void CAN1_RX0_IRQHandler(void); #endif #include "stm32f4xx_can.h" #include "stm32f4xx_gpio.h" #include "stm32f4xx_rcc.h" #include "CAN.h" #include "stm32f4xx_it.h" uint32_t TxMailBox0; int8_t CAN_TXMAILBOX_0; int16_t motor_angle; int16_t motor_speed; int16_t motor_torque; uint8_t motor_temp; uint8_t Set_GM6020_Voltage[8]; void CAN1_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; CAN_InitTypeDef CAN_InitStructure; CAN_FilterInitTypeDef CAN_FilterInitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1,ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOD,&GPIO_InitStructure); GPIO_PinAFConfig(GPIOD,GPIO_PinSource0,GPIO_AF_CAN1); GPIO_PinAFConfig(GPIOD,GPIO_PinSource1,GPIO_AF_CAN1); CAN_InitStructure.CAN_TTCM = DISABLE; CAN_InitStructure.CAN_ABOM = ENABLE; CAN_InitStructure.CAN_AWUM = ENABLE; CAN_InitStructure.CAN_NART = DISABLE; CAN_InitStructure.CAN_RFLM = DISABLE; CAN_InitStructure.CAN_TXFP = DISABLE; CAN_InitStructure.CAN_Mode = CAN_Mode_Normal; CAN_InitStructure.CAN_SJW = CAN_SJW_1tq; CAN_InitStructure.CAN_BS1 = CAN_BS1_2tq; CAN_InitStructure.CAN_BS2 = CAN_BS2_3tq; CAN_InitStructure.CAN_Prescaler = 7; CAN_Init(CAN1,&CAN_InitStructure); CAN_FilterInitStructure.CAN_FilterNumber = 0; CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask; CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_16bit; CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000; CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000; CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000; CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000; CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_Filter_FIFO0; CAN_FilterInitStructure.CAN_FilterActivation = ENABLE; CAN_FilterInit(&CAN_FilterInitStructure); CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE); NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } CanTxMsg TxMessage; void CAN_Send_Voltage_Command(uint8_t motor_id,int16_t voltage) { TxMessage.StdId = 0x1FF; TxMessage.IDE = CAN_Id_Standard; TxMessage.RTR = CAN_RTR_Data; TxMessage.DLC = 8; TxMessage.ExtId = 0; TxMailBox0 = CAN_TXMAILBOX_0; Set_GM6020_Voltage[0] = 0X22; } void CAN1_RX0_IRQHandler(void) { CanRxMsg RxMessage; if(CAN_GetITStatus(CAN1, CAN_IT_FMP0) != RESET) { CAN_Receive(CAN1, CAN_FIFO0, &RxMessage); if(RxMessage.StdId >= 0x204 && RxMessage.StdId <= 0x20B) { uint8_t motor_id = RxMessage.StdId - 0x204; if(motor_id < 8) { motor_angle = (RxMessage.Data[0] << 8) | RxMessage.Data[1]; motor_speed = (RxMessage.Data[2] << 8) | RxMessage.Data[3]; motor_torque = (RxMessage.Data[4] << 8) | RxMessage.Data[5]; motor_temp = RxMessage.Data[6]; } } CAN_ClearITPendingBit(CAN1, CAN_IT_FMP0); } } 什么问题?
最新发布
10-26
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值