使用 GNU Make (v3.82.90) 构建应用程序时,我不断收到此链接器错误。我已经看过关于 SO 的其他答案,但答案仍然让我望而却步。
gcc -o build obj/teos_init.o obj/teos_event.o obj/teos_task.o obj/teos_sem.o obj
/teos_linkedlist.o obj/teos_log.o -Iinc/pvt -Iinc/pub -fmax-errors=3 -std=c11
c:/libs/mingw/bin/../lib/gcc/mingw32/4.9.3/../../../libmingw32.a(main.o):(.text.
startup+0xa7): undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status
makefile:14: recipe for target 'build' failed
make: *** [build] Error 1
Run Code Online (Sandbox Code Playgroud)
我的makefile就是这样...
INCDIR = inc/pvt inc/pub
SRCDIR = src
OBJDIR = obj
LIBDIR = lib
CC=gcc
CFLAGS := $(foreach d, $(INCDIR), -I$d) -fmax-errors=3 -std=c11
_SRC = teos_init.c teos_event.c teos_task.c teos_sem.c teos_linkedlist.c teos_log.c
_OBJ := $(subst $(SRCDIR),$(OBJDIR),$(_SRC:%.c=%.o)) …Run Code Online (Sandbox Code Playgroud) 我想使用单个查询更新MySQL表中的多个记录.基本上,这是一个任务表,它在不同的日期为不同的人分配.当通过在线表单更改和提交这些作业时,会提交大量POST数据(几乎所有待处理的作业).我编写了一个算法来对所有这些信息进行排序并得到我想要的信息,但我仍然坚持编写查询来更新MySQL表:
// Find the modified records and save their information
$update = 0;
for ( $n = 0; $n < $total_records; $n++ )
{
if ( $_POST['update'.$n] == true )
{
$updates_arr[$update] = array( intval($_POST['user_id'.$n]), intval($_POST['task'.$n]), $_POST['date'.$n] );
$update++;
}
}
if ( $mysql_db = OpenDatabase() )
{
$query = "UPDATE tasks_tbl";
if ( $updates_arr[0] )
{
$query .= " SET task = ".$updates_arr[0][1]." WHERE user_id = ".$updates_arr[0][0]." AND date = ".$updates_arr[0][2];
}
for ( $n = 1; $n < …Run Code Online (Sandbox Code Playgroud) WINAPI SetLastError()和C++关键字有throw什么区别?例如,是SetLastError(5);和throw 5;是一样的?
任何人都可以推荐一个(最好是免费的)工具来扫描Windows环境中连接的USB设备吗?这仅用于开发目的.我有一个USB外围设备,我知道它连接到我的系统时工作,但我在设备管理器中找不到它.我希望能够专门扫描它,因为我正在扩展我的应用程序以支持多种类型的USB设备,但是很难扫描.谢谢.
我的控制台应用程序在自己的线程中生成一个新的(不可见)窗口.在退出应用程序之前,它会尝试清理,并且GetMessage窗口消息泵中的最后一次调用失败. GetLastError返回1400,"无效的窗口句柄."
这是清理在应用程序线程中的进展:
if ( s_hNotifyWindowThread != NULL )
{
ASSERT(s_pobjNotifyWindow != NULL);
::PostMessage( s_pobjNotifyWindow->m_hWnd, WM_CLOSE, 0, 0 );
::WaitForSingleObject( s_hNotifyWindowThread, 50000L ); // Step 1: breakpoint here
::CloseHandle( s_hNotifyWindowThread ); // Step 4: breakpoint here
s_hNotifyWindowThread = NULL;
}
Run Code Online (Sandbox Code Playgroud)
这WndProc存在于为窗口创建的新线程中:
static LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
switch ( uMsg )
{
case WM_CLOSE:
::DestroyWindow( hWnd ); // Step 2: breakpoint here
break;
case WM_DESTROY:
::PostQuitMessage( 0 …Run Code Online (Sandbox Code Playgroud) 我有以下代码,当我尝试构建应用程序时生成错误:
#define LPAFDU LPBYTE;
typedef struct appAfDataIndIeee_tag
{
integrPktHead_t head;
BYTE flags;
WORD dstShort;
BYTE dstEndpoint;
BYTE srcShort;
BYTE srcIeee[8];
WORD clusterId;
BYTE afduLength;
LPAFDU afdu; // <-- error
} appAfDataIndIeee_t;
Run Code Online (Sandbox Code Playgroud)
这是它产生的错误:
错误C2208:'BYTE*':没有使用此类型定义的成员
错误C4430:缺少类型说明符 - 假定为int.注意:C++不支持default-int
如果我转出LPADFU了LPBYTE它编译成功.我更喜欢使用的定义或类型定义LPADFU.有谁知道我怎么能做这个工作?谢谢.
我修改了Visual C++应用程序中的现有类,使其成为泛型类.该类由另外两个模块使用.当我单独编译这些模块时,一切正常.但是,当我执行Build All时,我会收到以下链接器错误:
1>Linking...
1> Creating library C:\ccmdb\prep\g3_v5.3\g3_tools\fc_tools\ZFRTool\ZStackMTI\Debug\ZStackMTI.lib and object C:\ccmdb\prep\g3_v5.3\g3_tools\fc_tools\ZFRTool\ZStackMTI\Debug\ZStackMTI.exp
1>SerialPort.obj : error LNK2019: unresolved external symbol "public: __thiscall CRingBuffer<unsigned char>::CRingBuffer<unsigned char>(unsigned long)" (??0?$CRingBuffer@E@@QAE@K@Z) referenced in function "public: __thiscall CSerialPort::CSerialPort(void)" (??0CSerialPort@@QAE@XZ)
1>ZStackMTI.obj : error LNK2001: unresolved external symbol "public: __thiscall CRingBuffer<unsigned char>::CRingBuffer<unsigned char>(unsigned long)" (??0?$CRingBuffer@E@@QAE@K@Z)
1>SerialPort.obj : error LNK2019: unresolved external symbol "public: __thiscall CRingBuffer<unsigned char>::~CRingBuffer<unsigned char>(void)" (??1?$CRingBuffer@E@@QAE@XZ) referenced in function "public: void * __thiscall CRingBuffer<unsigned char>::`scalar deleting destructor'(unsigned int)" (??_G?$CRingBuffer@E@@QAEPAXI@Z)
1>ZStackMTI.obj : error LNK2001: unresolved external symbol "public: …Run Code Online (Sandbox Code Playgroud) 当我的C#(.NET 3.5)应用程序尝试访问MS Access 2007数据库时,该OleDbReader.GetString()方法抛出异常:
指定演员表无效.
我究竟做错了什么?
OleDbCommand cmd = null;
OleDbDataReader reader = null;
String queryString = "SELECT ids.ENUM_H, bas.[BAS BACnet Object Type/Instance] FROM [OV2 BAS] AS bas INNER JOIN [OV2 RefID] AS ids ON bas.[Ref ID] = ids.[Ref ID]";
this.Open();
try
{
cmd = new OleDbCommand(queryString, this._conn);
reader = cmd.ExecuteReader();
if (!reader.HasRows)
{
Exception e = new Exception("Read of mapping table returned no results.");
throw e;
}
else
{
while (reader.Read())
{
Int32 index;
String classTypeString = …Run Code Online (Sandbox Code Playgroud) 我正在尝试读取大小为114,808字节的二进制文件.我为文件分配内存,然后尝试使用fopen和读取文件fread.第一次fread被调用时,它总是以274个字节读取,并且后续调用feof始终返回1,即使显然没有到达文件的末尾.为什么是这样?
根据MSDN文档为feof,"该FEOF函数返回非零值,如果读取操作已试图读到文件的结束;否则它返回0".所以我不明白是什么导致feof一直回归1.
这是我到目前为止的代码.任何帮助将非常感激.谢谢!
// Open source file with read-only access
if ( iError == ERROR_SUCCESS )
{
#ifdef _MSC_VER
#pragma warning(disable : 4996)
#endif
pFile = fopen( pSrcPath, "r" );
if ( pFile == NULL )
{
iError = ERROR_FILE_NOT_FOUND;
}
}
// Read in source file to memory
if ( iError == ERROR_SUCCESS )
{
do
{
// Buffer pointer passed to fread …Run Code Online (Sandbox Code Playgroud)