我来我网
https://5come5.cn
 
您尚未 登录  注册 | 菠菜 | 软件站 | 音乐站 | 邮箱1 | 邮箱2 | 风格选择 | 更多 » 
 

本页主题: dll调用为啥子总是出错.... 隐藏签名 | 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

kenneygf



性别: 帅哥 状态: 该用户目前不在线
头衔: 星星在眨眼~
等级: 前途无量
发贴: 6207
威望: 0
浮云: 1131
在线等级:
注册时间: 2004-05-22
最后登陆: 2009-07-12

5come5帮你背单词 [ injury /'ind3əri/ n. 伤害,毁坏 ]


dll调用为啥子总是出错....

从msdn上抄的代码...

Quote:
调用代码如下:
// A simple program that uses LoadLibrary and
// GetProcAddress to access myPuts from Myputs.dll.

#include <stdio.h>
#include <windows.h>

extern "C"_declspec(dllimport) typedef int (*MYPROC)(LPTSTR);

VOID main(VOID)
{
  HINSTANCE hinstLib;
  MYPROC ProcAdd;
  BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;

  // Get a handle to the DLL module.

  hinstLib = LoadLibrary(TEXT("dll_msdn"));

  // If the handle is valid, try to get the function address.

  if (hinstLib != NULL)
  {
    ProcAdd = (MYPROC) GetProcAddress(hinstLib, TEXT("myPuts"));

    // If the function address is valid, call the function.

    if (NULL != ProcAdd)
    {
        fRunTimeLinkSuccess = TRUE;
        (ProcAdd) (TEXT("Message via DLL function\n"));
    }

    // Free the DLL module.

    fFreeResult = FreeLibrary(hinstLib);
  }

  // If unable to call the DLL function, use an alternative.

  if (! fRunTimeLinkSuccess)
    printf("Error\n");
}



Quote:

dll源码如下:

// The myPuts function writes a null-terminated string to
// the standard output device.

// The export mechanism used here is the __declspec(export)
// method supported by Microsoft Visual Studio, but any
// other export method supported by your development
// environment may be substituted.


#include <windows.h>

#define EOF (-1)

#ifdef __cplusplus   // If used by C++ code,
extern "C" {       // we need to export the C interface
#endif

__declspec(dllexport) int myPuts(LPTSTR lpszMsg)
{
  DWORD cchWritten;
  HANDLE hStdout;
  BOOL fRet;

  // Get a handle to the standard output device.

  hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
  if (INVALID_HANDLE_VALUE == hStdout)
    return EOF;

  // Write a null-terminated string to the standard output device.

  while (*lpszMsg != '\0')
  {
    fRet = WriteFile(hStdout, lpszMsg, 1, &cchWritten, NULL);
    if( (FALSE == fRet) || (1 != cchWritten) )
        return EOF;
    lpszMsg++;
  }
  return 1;
}

#ifdef __cplusplus
}
#endif


达人帮我看下为啥子得出的输出结果总是error



[ 此贴被kenneygf在2006-10-13 07:55重新编辑 ]
顶端 Posted: 2006-10-12 13:39 | [楼 主]
kenneygf



性别: 帅哥 状态: 该用户目前不在线
头衔: 星星在眨眼~
等级: 前途无量
发贴: 6207
威望: 0
浮云: 1131
在线等级:
注册时间: 2004-05-22
最后登陆: 2009-07-12

5come5帮你背单词 [ okey // a. & ad. 对,好,可以;同意,许可(okey=okay) ]


顺便就将编译好的dll lib贴上来

达人帮我调试下...
附件: myPuts.rar (43 K) 下载次数:0

顶端 Posted: 2006-10-12 13:41 | [1 楼]
hhbhhb



性别: 帅哥 状态: 该用户目前不在线
等级: 品行端正
发贴: 292
威望: 0
浮云: 1105
在线等级:
注册时间: 2006-09-21
最后登陆: 2009-03-16

5come5帮你背单词 [ starvation /'sta:veiən/ n. 饥饿,饿死 ]


myputs需要加扩展名dll不?
顶端 Posted: 2006-10-12 17:44 | [2 楼]
我来我网·5come5 Forum » 程序员之家

Total 0.010011(s) query 5, Time now is:11-27 19:38, Gzip enabled
Powered by PHPWind v5.3, Localized by 5come5 Tech Team, 黔ICP备16009856号