0

Hello all. I'm working on a simple game at the moment and thus I started heading in the direction of windows hooks. I easily got the low level keyboard hook working. But of course I had to attempt the other version which uses dll's for hooking. After many attempts at this with no success I figured I would try a simpler more "hello world" type dll tutorial. Here is my problem.

I'm currently using visual studio 2008 and I have the 3 supposed files needed for this to work.

The dll file:

#include "MyHook.h"
#include <string.h>

MYHOOK_API int AddNumbers(int x, int y){
    return x + y;
}
MYHOOK_API int GetMessage(char* x, int length){
    if(length>32){
        strcpy(x, "hello from dll");
        return 0;
    }
    else
        return -1;
}

The header file:

#ifndef MYHOOK_H
#define MYHOOK_H

#ifdef MYHOOK_DLLEXPORT
#define MYHOOK_API __declspec(dllexport)
#else
#define MYHOOK_API
#endif

MYHOOK_API int AddNumbers(int, int);
MYHOOK_API int GetMessage(char*, int);

#endif

And the def file:

; MyHook.def : Declares the module parameters for the DLL.

LIBRARY      "myhook"
DESCRIPTION  "MyHook Windows Dynamic Link Library"

EXPORTS
    ; Explicit exports can go here
    AddNumbers
    GetMessage

SECTIONS
    ; Pragma sections

When I try to compile the project I get this error:

1>------ Build started: Project: kbhook, Configuration: Debug Win32 ------
1>Linking...
1>MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
1>C:\cpp\kbhook\Debug\kbhook.exe : fatal error LNK1120: 1 unresolved externals
1>Build log was saved at "file://c:\Users\william78\Desktop\cpp\kbhook\kbhook\Debug\BuildLog.htm"
1>kbhook - 2 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

If somebody could help me out here it would be greatly appreciated.

2
Contributors
1
Reply
3
Views
4 Years
Discussion Span
Last Post by dx9_programmer
0

It seems the compiler is looking for the definition of the int main() function but it can't find it, but you want to make a DLL. The problem is you're compiling the code as an application (.exe) instead of a dynamic library (.dll).

Go to project properties -> General -> Configuration Type

Configuration type should be Dynamic Library (.dll)

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.