俺用CheckDlgButton这个API时总是提示找不到DLL入口,原以为是大小写问题,可是改来改去也不对。
俺把代码贴出来,希望各位老大赐教!!谢谢!
Private Declare Function CheckDlgButton Lib "user32.dll" Alias "CheckDLGButton" (ByVal hDlg As Long, ByVal nIDButton As Long, ByVal wCheck As Long) As LongBWND = CheckDlgButton(SOFT_Handle, option_Handle, Checked)

解决方案 »

  1.   

    Private Declare Function CheckDlgButton Lib "user32" (ByVal hDlg As Long, ByVal nIDButton As Long, ByVal wCheck As Long) As Long
      

  2.   

    Private Declare Function CheckDlgButton Lib "user32.dll" Alias "CheckDlgButtonA" (ByVal hDlg As Long, ByVal nIDButton As Long, ByVal wCheck As Long) As Long
      

  3.   

    声明
    Public Declare Function CheckDlgButton Lib "user32" Alias "CheckDLGButtonA" (ByVal hDlg As Long, ByVal nIDButton As Long, ByVal wCheck As Long) As Long说明
    该函数改变按钮控制的选中状态。返回值:
    如果函数执行成功,返回值非零;如果函数失败,则返回值为零。若想获取更多错误信息,请调用 GetLastError函数。参数表:
    hDlg:指向含有该按钮的对话框的句柄。
    nlDButton:标识要修改的按钮。
    uCheck:给定该按钮的选中状态。该参数可取下列值,这些值的含义如下:
    BST_CHECKED:设置按钮状态为己选中(checked)。
    BST_INDETERMINATE:设置按钮状态变灰,表示不确定状态。只有在该按钮具有BS_3STATE或BS_AUTO3STATE样式时才能使用该值。
    BST_UNCHECKED:设置按钮为未选中状态(unchecked)。
      

  4.   

    Alias "CheckDlgButtonA":
    CheckDlgButtonA是CheckDlgButton的别名,用来区分相同名字的API
      

  5.   

    改成了Private Declare Function CheckDlgButton Lib "user32.dll" Alias "CheckDlgButtonA" (ByVal hDlg As Long, ByVal nIDButton As Long, ByVal wCheck As Long) As LongBWND = CheckDlgButton(SOFT_Handle, option_Handle, Checked)还是一样,找不到入口。可是我用编辑器打开USER32.DLL
    的确有这个函数。俺晕!!
      

  6.   

    Private Declare Function CheckDlgButton Lib "user32.dll" Alias "CheckDLGButtonA" (ByVal hDlg As Long, ByVal nIDButton As Long, ByVal wCheck As Long) As Long
    这样始终不行,但用下面这个就行了
    Private Declare Function CheckDlgButton Lib "user32" (ByVal hDlg As Long, ByVal nIDButton As Long, ByVal wCheck As Long) As Long
    有点不明白,为什么加上别名CheckDLGButtonA就不行,不知哪位高人能不能说说明白。
      

  7.   

    定义:
    Private Declare Function CheckDlgButton Lib "user32" (ByVal hDlg As Long, ByVal nIDButton As Long, ByVal wCheck As Long) As Long
    调用
    BWND = CheckDlgButton(SOFT_Handle, option_Handle, Checked)
    SOFT_Handle是软件句柄
    option_Handle是控件句柄
    checked没有定义。
    但返回值就是为0,而软件句柄和控件句柄是绝对不会错的,不知是何原因。兄弟们帮帮忙呀!!!
      

  8.   

    你的问题很简单。添加一个别名和函数名相同的API声明到VB中,你会发现别名(Alias "xxxx")是不会显示的,即使你自动添加了它,Vb也会帮你去掉。既然你这样声明:
    Private Declare Function CheckDlgButton Lib "user32.dll" Alias "CheckDLGButtonA" (ByVal hDlg As Long, ByVal nIDButton As Long, ByVal wCheck As Long) As Long
    VB没有帮你把Alias "CheckDLGButtonA"去掉,这显然说明API函数声明的别名是区分大小写的。所以,如果把Alias "CheckDLGButtonA"改成Alias "CheckDlgButtonA",你的问题就解决了(这时候VB又会自动把它去掉,得到下面这个声明:Private Declare Function CheckDlgButton Lib "user32.dll" (ByVal hDlg As Long, ByVal nIDButton As Long, ByVal wCheck As Long) As Long;至于user32和user32.dll,这个VB都会自动识别,不必担心。)
      

  9.   

    后面一个问题,先看看函数说明(来自MSDN)
    CheckDlgButton
    The CheckDlgButton function changes the check state of a button control.BOOL CheckDlgButton(
      HWND hDlg,      // handle to dialog box
      int nIDButton,  // button identifier
      UINT uCheck     // check state
    );
    Parameters
    hDlg 
    [in] Handle to the dialog box that contains the button. 
    nIDButton 
    [in] Specifies the identifier of the button to modify. 
    uCheck 
    [in] Specifies the check state of the button. This parameter can be one of the following values.
    BST_CHECKED Sets the button state to checked. 
    BST_INDETERMINATE Sets the button state to grayed, indicating an indeterminate state. Use this value only if the button has the BS_3STATE or BS_AUTO3STATE style. 
    BST_UNCHECKED Sets the button state to cleared 第二个参数nIDButton是int而非hwnd类型,所以这个参数绝对不应该是控件的句柄。下面说得很详细,这个参数是用来识别按钮的,说白了就是个序号。
    后面给出的一个例子,其中涉及到这个函数的部分这么说:
    CheckDlgButton(hwndDlg, ID_ABSREL, fRelative); 
    对于ID_ABSREL,MSDN中提及的只有ID_LINE, ID_ABSREL, IDOK, 和 IDCANCEL这四个值可以作为这个函数的第二个参数,其它没有更详细的内容,我也没有找到这(几)个常数在Vb中的声明,所以暂时帮不了你了。
      

  10.   

    同时建议你把第二个参数换成ID_ABSREL试试,或许会有新的发现。
      

  11.   

    你了解vb 的窗体 与 对话框有什么区别吗。建议你去下载个 VC 或 MASM 的教程来看看。
    CheckDlgButton 这个函数使用在对话框中的  第二个参数是 ID 
    如果你是用API 来创建对话框的 请使用 CheckDlgButton  如果你是用vb窗体请使用 SendMessage
    VB 的窗体是个垃圾气得我要死。