ERRO NA CHAMADA DA API EM 32 BITES
                    Alguem pode me ajudar e me dizer por que essa função funciona correto quando executada em plataforma AnyCPU 
Quando tento compilar na plataforma x86 retorna esse erro:
System.AccessViolationException: 'Tentativa de leitura ou gravação em memória protegida. Normalmente, isso é uma indicação de que outra memória está danificada.'
//Essa rotina tem a função de remover toos os checkbox de um treeview que não são a extremidade do nó
private void HideCheckBox(TreeView tvw, TreeNode node) {
TVITEM tvi = new TVITEM();
tvi.hItem = node.Handle;
tvi.mask = TVIF_STATE;
tvi.stateMask = TVIS_STATEIMAGEMASK;
tvi.state = 0;
SendMessage(tvw.Handle, TVM_SETITEM, IntPtr.Zero, tvi); //Aqui ocorre o erro
}
//Declarações
public struct TVITEM {
public int mask;
public IntPtr hItem;
public int state;
public int stateMask;
public string lpszText;
public int cchTextMax;
public int iImage;
public int iSelectedImage;
public int cChildren;
public IntPtr lParam;
}
public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, TVITEM lParam);
                
            Quando tento compilar na plataforma x86 retorna esse erro:
System.AccessViolationException: 'Tentativa de leitura ou gravação em memória protegida. Normalmente, isso é uma indicação de que outra memória está danificada.'
//Essa rotina tem a função de remover toos os checkbox de um treeview que não são a extremidade do nó
private void HideCheckBox(TreeView tvw, TreeNode node) {
TVITEM tvi = new TVITEM();
tvi.hItem = node.Handle;
tvi.mask = TVIF_STATE;
tvi.stateMask = TVIS_STATEIMAGEMASK;
tvi.state = 0;
SendMessage(tvw.Handle, TVM_SETITEM, IntPtr.Zero, tvi); //Aqui ocorre o erro
}
//Declarações
public struct TVITEM {
public int mask;
public IntPtr hItem;
public int state;
public int stateMask;
public string lpszText;
public int cchTextMax;
public int iImage;
public int iSelectedImage;
public int cChildren;
public IntPtr lParam;
}
public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, TVITEM lParam);
                    Nossa, certamente esse é um jeito muito esquisito. Quem sabe você explica direitinho o que quer fazer. Se o treeview está na sua aplicação, certamente você tem total controle sobre ele, o que elinima a necessidade de usar uma API pra isso.
                
            
                        Alterado em 11/01/2024 14:14:57
                    Quero remover todas as checkbox da linha para os itens. Quero deixar o checkbox somente no último item de cada elemento
Não conheço um modo de fazer isso pelo próprio controle
                
            Não conheço um modo de fazer isso pelo próprio controle
                    Faça um override do draw, aqui mostra mais ou menos
                
            
                    Pessoal 
Resolvido o problema. Foi só mudar essas duas linhas
public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, ref TVITEM lParam);
e
SendMessage(node.TreeView.Handle, TVM_SETITEM, IntPtr.Zero, ref tvi);
            Resolvido o problema. Foi só mudar essas duas linhas
public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, ref TVITEM lParam);
e
SendMessage(node.TreeView.Handle, TVM_SETITEM, IntPtr.Zero, ref tvi);
                    Tudo funcionando certinho
                
            
                        Tópico encerrado , respostas não são mais permitidas